From 7546071df86506969cd968d6183810b0fe13d23e Mon Sep 17 00:00:00 2001
From: Onuray Sahin <onurays@element.io>
Date: Wed, 10 Nov 2021 13:47:15 +0300
Subject: [PATCH 1/4] Design review fixes.

---
 .../app/features/poll/create/CreatePollController.kt     | 3 ++-
 .../app/features/poll/create/CreatePollFragment.kt       | 9 ++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
index 274532e63f..8d8598510b 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
@@ -56,7 +56,8 @@ class CreatePollController @Inject constructor(
             id("question")
             value(currentState.question)
             hint(host.stringProvider.getString(R.string.create_poll_question_hint))
-            singleLine(false)
+            singleLine(true)
+            imeOptions(EditorInfo.IME_ACTION_NEXT)
             maxLength(500)
             onTextChange {
                 host.callback?.onQuestionChanged(it)
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
index 95b3282aee..22afe9369d 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
@@ -22,6 +22,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.core.view.isVisible
+import androidx.recyclerview.widget.LinearLayoutManager
 import com.airbnb.mvrx.activityViewModel
 import com.airbnb.mvrx.withState
 import im.vector.app.R
@@ -50,7 +51,7 @@ class CreatePollFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
         vectorBaseActivity.setSupportActionBar(views.createPollToolbar)
 
-        views.createPollRecyclerView.configureWith(controller)
+        views.createPollRecyclerView.configureWith(controller, disableItemAnimation = true)
         controller.callback = this
 
         views.createPollClose.debouncedClicks {
@@ -92,6 +93,12 @@ class CreatePollFragment @Inject constructor(
 
     override fun onAddOption() {
         viewModel.handle(CreatePollAction.OnAddOption)
+        // Scroll to bottom to show "Add Option" button
+        views.createPollRecyclerView.apply {
+            postDelayed({
+                smoothScrollToPosition(adapter?.itemCount?.minus(1) ?: 0)
+            }, 100)
+        }
     }
 
     private fun handleSuccess() {

From 89db5a6ecd313a3d1cf141410ec908d10b6a4d18 Mon Sep 17 00:00:00 2001
From: Onuray Sahin <onurays@element.io>
Date: Thu, 11 Nov 2021 11:52:01 +0300
Subject: [PATCH 2/4] Lint fixes.

---
 .../matrix/android/sdk/api/session/room/send/SendService.kt  | 1 -
 .../sdk/internal/session/room/send/DefaultSendService.kt     | 1 -
 .../sdk/internal/session/room/send/LocalEchoEventFactory.kt  | 3 ---
 vector/src/main/java/im/vector/app/core/di/FragmentModule.kt | 2 +-
 .../java/im/vector/app/core/di/MavericksViewModelModule.kt   | 2 +-
 .../home/room/detail/composer/TextComposerViewModel.kt       | 1 -
 .../im/vector/app/features/navigation/DefaultNavigator.kt    | 5 ++---
 .../im/vector/app/features/poll/create/CreatePollActivity.kt | 2 +-
 .../vector/app/features/poll/create/CreatePollController.kt  | 2 +-
 .../im/vector/app/features/poll/create/CreatePollFragment.kt | 1 -
 .../vector/app/features/poll/create/CreatePollViewState.kt   | 1 -
 11 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt
index a13e24940b..a2b38b6606 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt
@@ -20,7 +20,6 @@ import org.matrix.android.sdk.api.session.content.ContentAttachmentData
 import org.matrix.android.sdk.api.session.events.model.Content
 import org.matrix.android.sdk.api.session.events.model.Event
 import org.matrix.android.sdk.api.session.room.model.message.MessageType
-import org.matrix.android.sdk.api.session.room.model.message.OptionItem
 import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
 import org.matrix.android.sdk.api.util.Cancelable
 
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt
index b6a6714d90..77aadef6bd 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt
@@ -37,7 +37,6 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageFileContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageImageContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
-import org.matrix.android.sdk.api.session.room.model.message.OptionItem
 import org.matrix.android.sdk.api.session.room.model.message.getFileUrl
 import org.matrix.android.sdk.api.session.room.send.SendService
 import org.matrix.android.sdk.api.session.room.send.SendState
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt
index cdd6ccc0a4..5cb9687518 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt
@@ -38,14 +38,11 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageContentWithF
 import org.matrix.android.sdk.api.session.room.model.message.MessageFileContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageFormat
 import org.matrix.android.sdk.api.session.room.model.message.MessageImageContent
-import org.matrix.android.sdk.api.session.room.model.message.MessageOptionsContent
 import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
 import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageType
 import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent
-import org.matrix.android.sdk.api.session.room.model.message.OPTION_TYPE_POLL
-import org.matrix.android.sdk.api.session.room.model.message.OptionItem
 import org.matrix.android.sdk.api.session.room.model.message.PollAnswer
 import org.matrix.android.sdk.api.session.room.model.message.PollCreationInfo
 import org.matrix.android.sdk.api.session.room.model.message.PollQuestion
diff --git a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt
index afae1d6038..67cb9dd0f7 100644
--- a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt
+++ b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt
@@ -26,7 +26,6 @@ import dagger.hilt.android.components.ActivityComponent
 import dagger.multibindings.IntoMap
 import im.vector.app.features.attachments.preview.AttachmentsPreviewFragment
 import im.vector.app.features.contactsbook.ContactsBookFragment
-import im.vector.app.features.poll.create.CreatePollFragment
 import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsFragment
 import im.vector.app.features.crypto.quads.SharedSecuredStorageKeyFragment
 import im.vector.app.features.crypto.quads.SharedSecuredStoragePassphraseFragment
@@ -95,6 +94,7 @@ import im.vector.app.features.login2.terms.LoginTermsFragment2
 import im.vector.app.features.matrixto.MatrixToRoomSpaceFragment
 import im.vector.app.features.matrixto.MatrixToUserFragment
 import im.vector.app.features.pin.PinFragment
+import im.vector.app.features.poll.create.CreatePollFragment
 import im.vector.app.features.qrcode.QrCodeScannerFragment
 import im.vector.app.features.reactions.EmojiChooserFragment
 import im.vector.app.features.reactions.EmojiSearchResultFragment
diff --git a/vector/src/main/java/im/vector/app/core/di/MavericksViewModelModule.kt b/vector/src/main/java/im/vector/app/core/di/MavericksViewModelModule.kt
index c1275904e2..da5e7392e1 100644
--- a/vector/src/main/java/im/vector/app/core/di/MavericksViewModelModule.kt
+++ b/vector/src/main/java/im/vector/app/core/di/MavericksViewModelModule.kt
@@ -26,7 +26,6 @@ import im.vector.app.features.call.conference.JitsiCallViewModel
 import im.vector.app.features.call.transfer.CallTransferViewModel
 import im.vector.app.features.contactsbook.ContactsBookViewModel
 import im.vector.app.features.createdirect.CreateDirectRoomViewModel
-import im.vector.app.features.poll.create.CreatePollViewModel
 import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsViewModel
 import im.vector.app.features.crypto.quads.SharedSecureStorageViewModel
 import im.vector.app.features.crypto.recover.BootstrapSharedViewModel
@@ -55,6 +54,7 @@ import im.vector.app.features.login.LoginViewModel
 import im.vector.app.features.login2.LoginViewModel2
 import im.vector.app.features.login2.created.AccountCreatedViewModel
 import im.vector.app.features.matrixto.MatrixToBottomSheetViewModel
+import im.vector.app.features.poll.create.CreatePollViewModel
 import im.vector.app.features.rageshake.BugReportViewModel
 import im.vector.app.features.reactions.EmojiSearchResultViewModel
 import im.vector.app.features.room.RequireActiveMembershipViewModel
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerViewModel.kt
index 9b879d1314..727eb2f670 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerViewModel.kt
@@ -47,7 +47,6 @@ import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
 import org.matrix.android.sdk.api.session.room.model.RoomAvatarContent
 import org.matrix.android.sdk.api.session.room.model.RoomMemberContent
 import org.matrix.android.sdk.api.session.room.model.message.MessageType
-import org.matrix.android.sdk.api.session.room.model.message.OptionItem
 import org.matrix.android.sdk.api.session.room.powerlevels.PowerLevelsHelper
 import org.matrix.android.sdk.api.session.room.send.UserDraft
 import org.matrix.android.sdk.api.session.room.timeline.getLastMessageContent
diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt
index 87d1641638..89a05c88da 100644
--- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt
+++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt
@@ -40,9 +40,6 @@ import im.vector.app.features.call.conference.JitsiCallViewModel
 import im.vector.app.features.call.conference.VectorJitsiActivity
 import im.vector.app.features.call.transfer.CallTransferActivity
 import im.vector.app.features.createdirect.CreateDirectRoomActivity
-import im.vector.app.features.poll.create.CreatePollActivity
-import im.vector.app.features.poll.create.CreatePollArgs
-import im.vector.app.features.poll.create.CreatePollViewModel
 import im.vector.app.features.crypto.keysbackup.settings.KeysBackupManageActivity
 import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity
 import im.vector.app.features.crypto.recover.BootstrapBottomSheet
@@ -67,6 +64,8 @@ import im.vector.app.features.media.VectorAttachmentViewerActivity
 import im.vector.app.features.pin.PinActivity
 import im.vector.app.features.pin.PinArgs
 import im.vector.app.features.pin.PinMode
+import im.vector.app.features.poll.create.CreatePollActivity
+import im.vector.app.features.poll.create.CreatePollArgs
 import im.vector.app.features.roomdirectory.RoomDirectoryActivity
 import im.vector.app.features.roomdirectory.RoomDirectoryData
 import im.vector.app.features.roomdirectory.createroom.CreateRoomActivity
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollActivity.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollActivity.kt
index c57f479177..fc830ddae9 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollActivity.kt
@@ -20,10 +20,10 @@ import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.view.View
+import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.R
 import im.vector.app.core.extensions.addFragment
 import im.vector.app.core.platform.SimpleFragmentActivity
-import dagger.hilt.android.AndroidEntryPoint
 
 @AndroidEntryPoint
 class CreatePollActivity : SimpleFragmentActivity() {
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
index 8d8598510b..9d825fdaca 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
@@ -71,7 +71,7 @@ class CreatePollController @Inject constructor(
         }
 
         currentState.options.forEachIndexed { index, option ->
-            val imeOptions = if (index == currentState.options.size -1) EditorInfo.IME_ACTION_DONE else EditorInfo.IME_ACTION_NEXT
+            val imeOptions = if (index == currentState.options.size - 1) EditorInfo.IME_ACTION_DONE else EditorInfo.IME_ACTION_NEXT
             formEditTextWithDeleteItem {
                 id("option_$index")
                 value(option)
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
index 22afe9369d..7d7f0801e9 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
@@ -22,7 +22,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.core.view.isVisible
-import androidx.recyclerview.widget.LinearLayoutManager
 import com.airbnb.mvrx.activityViewModel
 import com.airbnb.mvrx.withState
 import im.vector.app.R
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollViewState.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollViewState.kt
index 7910a1dd6c..a9060cc89f 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollViewState.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollViewState.kt
@@ -30,4 +30,3 @@ data class CreatePollViewState(
             roomId = args.roomId
     )
 }
-

From b6717f4e46ee051b594c72c1797ac4833e4d2f72 Mon Sep 17 00:00:00 2001
From: Onuray Sahin <onurays@element.io>
Date: Thu, 11 Nov 2021 13:38:39 +0300
Subject: [PATCH 3/4] Code review fixes.

---
 .../features/form/FormEditTextWithDeleteItem.kt    | 14 ++++++++------
 .../features/poll/create/CreatePollController.kt   |  4 +++-
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/form/FormEditTextWithDeleteItem.kt b/vector/src/main/java/im/vector/app/features/form/FormEditTextWithDeleteItem.kt
index 19c94a1742..abcd1429d4 100644
--- a/vector/src/main/java/im/vector/app/features/form/FormEditTextWithDeleteItem.kt
+++ b/vector/src/main/java/im/vector/app/features/form/FormEditTextWithDeleteItem.kt
@@ -17,6 +17,7 @@
 package im.vector.app.features.form
 
 import android.text.Editable
+import android.view.inputmethod.EditorInfo
 import android.widget.ImageButton
 import com.airbnb.epoxy.EpoxyAttribute
 import com.airbnb.epoxy.EpoxyModelClass
@@ -70,12 +71,13 @@ abstract class FormEditTextWithDeleteItem : VectorEpoxyModel<FormEditTextWithDel
         holder.textInputEditText.setTextIfDifferent(value)
 
         holder.textInputEditText.isEnabled = enabled
-        if (singleLine) {
-            holder.textInputEditText.setSingleLine()
-        }
-        imeOptions?.let {
-            holder.textInputEditText.imeOptions = it
-        }
+        holder.textInputEditText.isSingleLine = singleLine
+
+        holder.textInputEditText.imeOptions =
+                imeOptions ?: when (singleLine) {
+                    true  -> EditorInfo.IME_ACTION_NEXT
+                    false -> EditorInfo.IME_ACTION_NONE
+                }
 
         holder.textInputEditText.addTextChangedListenerOnce(onTextChangeListener)
 
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
index 9d825fdaca..515f59a38c 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollController.kt
@@ -52,12 +52,14 @@ class CreatePollController @Inject constructor(
             title(host.stringProvider.getString(R.string.create_poll_question_title))
         }
 
+        val questionImeAction = if (currentState.options.isEmpty()) EditorInfo.IME_ACTION_DONE else EditorInfo.IME_ACTION_NEXT
+
         formEditTextItem {
             id("question")
             value(currentState.question)
             hint(host.stringProvider.getString(R.string.create_poll_question_hint))
             singleLine(true)
-            imeOptions(EditorInfo.IME_ACTION_NEXT)
+            imeOptions(questionImeAction)
             maxLength(500)
             onTextChange {
                 host.callback?.onQuestionChanged(it)

From a6c88b74a4889ba1446f9de1eb5155a05d0a21c1 Mon Sep 17 00:00:00 2001
From: Onuray Sahin <onurays@element.io>
Date: Thu, 11 Nov 2021 13:42:04 +0300
Subject: [PATCH 4/4] Hide poll icon from attachment type selector for now.

---
 vector/src/main/res/layout/view_attachment_type_selector.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/vector/src/main/res/layout/view_attachment_type_selector.xml b/vector/src/main/res/layout/view_attachment_type_selector.xml
index b0246e1add..e5948edc2c 100644
--- a/vector/src/main/res/layout/view_attachment_type_selector.xml
+++ b/vector/src/main/res/layout/view_attachment_type_selector.xml
@@ -171,7 +171,7 @@
             android:layout_margin="16dp"
             android:baselineAligned="false"
             android:orientation="horizontal"
-            android:visibility="visible"
+            android:visibility="gone"
             android:weightSum="3">
 
             <LinearLayout