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