Code review fixes.

This commit is contained in:
Onuray Sahin 2021-10-29 16:54:54 +03:00
parent a5a3a817e1
commit 40aa0175d0
13 changed files with 31 additions and 45 deletions

1
changelog.d/4367.feature Normal file
View File

@ -0,0 +1 @@
Poll Feature - Create Poll Screen

View File

@ -339,7 +339,7 @@
<activity android:name=".features.spaces.manage.SpaceManageActivity" /> <activity android:name=".features.spaces.manage.SpaceManageActivity" />
<activity android:name=".features.spaces.people.SpacePeopleActivity" /> <activity android:name=".features.spaces.people.SpacePeopleActivity" />
<activity android:name=".features.spaces.leave.SpaceLeaveAdvancedActivity" /> <activity android:name=".features.spaces.leave.SpaceLeaveAdvancedActivity" />
<activity android:name=".features.createpoll.CreatePollActivity" /> <activity android:name=".features.poll.create.CreatePollActivity" />
<!-- Services --> <!-- Services -->

View File

@ -26,7 +26,7 @@ import dagger.hilt.android.components.ActivityComponent
import dagger.multibindings.IntoMap import dagger.multibindings.IntoMap
import im.vector.app.features.attachments.preview.AttachmentsPreviewFragment import im.vector.app.features.attachments.preview.AttachmentsPreviewFragment
import im.vector.app.features.contactsbook.ContactsBookFragment import im.vector.app.features.contactsbook.ContactsBookFragment
import im.vector.app.features.createpoll.CreatePollFragment import im.vector.app.features.poll.create.CreatePollFragment
import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsFragment import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsFragment
import im.vector.app.features.crypto.quads.SharedSecuredStorageKeyFragment import im.vector.app.features.crypto.quads.SharedSecuredStorageKeyFragment
import im.vector.app.features.crypto.quads.SharedSecuredStoragePassphraseFragment import im.vector.app.features.crypto.quads.SharedSecuredStoragePassphraseFragment

View File

@ -26,7 +26,7 @@ import im.vector.app.features.call.conference.JitsiCallViewModel
import im.vector.app.features.call.transfer.CallTransferViewModel import im.vector.app.features.call.transfer.CallTransferViewModel
import im.vector.app.features.contactsbook.ContactsBookViewModel import im.vector.app.features.contactsbook.ContactsBookViewModel
import im.vector.app.features.createdirect.CreateDirectRoomViewModel import im.vector.app.features.createdirect.CreateDirectRoomViewModel
import im.vector.app.features.createpoll.CreatePollViewModel import im.vector.app.features.poll.create.CreatePollViewModel
import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsViewModel import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsViewModel
import im.vector.app.features.crypto.quads.SharedSecureStorageViewModel import im.vector.app.features.crypto.quads.SharedSecureStorageViewModel
import im.vector.app.features.crypto.recover.BootstrapSharedViewModel import im.vector.app.features.crypto.recover.BootstrapSharedViewModel

View File

@ -40,8 +40,9 @@ import im.vector.app.features.call.conference.JitsiCallViewModel
import im.vector.app.features.call.conference.VectorJitsiActivity import im.vector.app.features.call.conference.VectorJitsiActivity
import im.vector.app.features.call.transfer.CallTransferActivity import im.vector.app.features.call.transfer.CallTransferActivity
import im.vector.app.features.createdirect.CreateDirectRoomActivity import im.vector.app.features.createdirect.CreateDirectRoomActivity
import im.vector.app.features.createpoll.CreatePollActivity import im.vector.app.features.poll.create.CreatePollActivity
import im.vector.app.features.createpoll.CreatePollArgs 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.settings.KeysBackupManageActivity
import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity
import im.vector.app.features.crypto.recover.BootstrapBottomSheet import im.vector.app.features.crypto.recover.BootstrapBottomSheet
@ -501,7 +502,10 @@ class DefaultNavigator @Inject constructor(
} }
override fun openCreatePoll(context: Context, roomId: String) { override fun openCreatePoll(context: Context, roomId: String) {
val intent = CreatePollActivity.getIntent(context, CreatePollArgs(roomId = roomId)) val intent = CreatePollActivity.getIntent(
context,
CreatePollArgs(roomId = roomId, minOptionsCount = CreatePollViewModel.MIN_OPTIONS_COUNT)
)
context.startActivity(intent) context.startActivity(intent)
} }

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import im.vector.app.core.platform.VectorViewModelAction import im.vector.app.core.platform.VectorViewModelAction

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -23,23 +23,16 @@ import android.view.View
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.addFragment import im.vector.app.core.extensions.addFragment
import im.vector.app.core.platform.SimpleFragmentActivity import im.vector.app.core.platform.SimpleFragmentActivity
import javax.inject.Inject
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint @AndroidEntryPoint
class CreatePollActivity : SimpleFragmentActivity(), CreatePollViewModel.Factory { class CreatePollActivity : SimpleFragmentActivity() {
var currentRoomId: String? = null
@Inject lateinit var createPollViewModelFactory: CreatePollViewModel.Factory
override fun create(initialState: CreatePollViewState) = createPollViewModelFactory.create(initialState)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
views.toolbar.visibility = View.GONE views.toolbar.visibility = View.GONE
val createPollArgs: CreatePollArgs? = intent?.extras?.getParcelable(EXTRA_CREATE_POLL_ARGS) val createPollArgs: CreatePollArgs? = intent?.extras?.getParcelable(EXTRA_CREATE_POLL_ARGS)
currentRoomId = createPollArgs?.roomId
if (isFirstCreation()) { if (isFirstCreation()) {
addFragment( addFragment(

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import android.view.Gravity import android.view.Gravity
import com.airbnb.epoxy.EpoxyController import com.airbnb.epoxy.EpoxyController

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable import android.os.Parcelable
@ -23,7 +23,6 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.airbnb.mvrx.activityViewModel import com.airbnb.mvrx.activityViewModel
import com.airbnb.mvrx.args
import com.airbnb.mvrx.withState import com.airbnb.mvrx.withState
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.configureWith
@ -34,12 +33,12 @@ import javax.inject.Inject
@Parcelize @Parcelize
data class CreatePollArgs( data class CreatePollArgs(
val roomId: String val roomId: String,
val minOptionsCount: Int
) : Parcelable ) : Parcelable
class CreatePollFragment @Inject constructor( class CreatePollFragment @Inject constructor(
private val controller: CreatePollController, private val controller: CreatePollController
val createPollViewModelFactory: CreatePollViewModel.Factory
) : VectorBaseFragment<FragmentCreatePollBinding>(), CreatePollController.Callback { ) : VectorBaseFragment<FragmentCreatePollBinding>(), CreatePollController.Callback {
private val viewModel: CreatePollViewModel by activityViewModel() private val viewModel: CreatePollViewModel by activityViewModel()

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import im.vector.app.core.platform.VectorViewEvents import im.vector.app.core.platform.VectorViewEvents

View File

@ -14,12 +14,9 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import com.airbnb.mvrx.ActivityViewModelContext
import com.airbnb.mvrx.FragmentViewModelContext
import com.airbnb.mvrx.MavericksViewModelFactory import com.airbnb.mvrx.MavericksViewModelFactory
import com.airbnb.mvrx.ViewModelContext
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
@ -42,17 +39,7 @@ class CreatePollViewModel @AssistedInject constructor(
companion object : MavericksViewModelFactory<CreatePollViewModel, CreatePollViewState> by hiltMavericksViewModelFactory() { companion object : MavericksViewModelFactory<CreatePollViewModel, CreatePollViewState> by hiltMavericksViewModelFactory() {
private const val REQUIRED_MIN_OPTION_COUNT = 2 const val MIN_OPTIONS_COUNT = 2
}
init {
// Initialize with REQUIRED_MIN_OPTION_COUNT default empty options
setState {
copy(
question = "",
options = List(REQUIRED_MIN_OPTION_COUNT) { "" }
)
}
} }
override fun handle(action: CreatePollAction) { override fun handle(action: CreatePollAction) {
@ -68,13 +55,13 @@ class CreatePollViewModel @AssistedInject constructor(
private fun handleOnCreatePoll() = withState { state -> private fun handleOnCreatePoll() = withState { state ->
val nonEmptyOptions = state.options.filter { it.isNotEmpty() } val nonEmptyOptions = state.options.filter { it.isNotEmpty() }
when { when {
state.question.isEmpty() -> { state.question.isEmpty() -> {
_viewEvents.post(CreatePollViewEvents.EmptyQuestionError) _viewEvents.post(CreatePollViewEvents.EmptyQuestionError)
} }
nonEmptyOptions.size < REQUIRED_MIN_OPTION_COUNT -> { nonEmptyOptions.size < MIN_OPTIONS_COUNT -> {
_viewEvents.post(CreatePollViewEvents.NotEnoughOptionsError(requiredOptionsCount = REQUIRED_MIN_OPTION_COUNT)) _viewEvents.post(CreatePollViewEvents.NotEnoughOptionsError(requiredOptionsCount = MIN_OPTIONS_COUNT))
} }
else -> { else -> {
room.sendPoll(state.question, state.options) room.sendPoll(state.question, state.options)
_viewEvents.post(CreatePollViewEvents.Success) _viewEvents.post(CreatePollViewEvents.Success)
} }
@ -122,6 +109,6 @@ class CreatePollViewModel @AssistedInject constructor(
private fun canCreatePoll(state: CreatePollViewState): Boolean { private fun canCreatePoll(state: CreatePollViewState): Boolean {
return state.question.isNotEmpty() && return state.question.isNotEmpty() &&
state.options.filter { it.isNotEmpty() }.size >= REQUIRED_MIN_OPTION_COUNT state.options.filter { it.isNotEmpty() }.size >= MIN_OPTIONS_COUNT
} }
} }

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package im.vector.app.features.createpoll package im.vector.app.features.poll.create
import com.airbnb.mvrx.MavericksState import com.airbnb.mvrx.MavericksState
@ -26,7 +26,8 @@ data class CreatePollViewState(
) : MavericksState { ) : MavericksState {
constructor(args: CreatePollArgs) : this( constructor(args: CreatePollArgs) : this(
roomId = args.roomId roomId = args.roomId,
options = List(args.minOptionsCount) { "" }
) )
} }

View File

@ -171,6 +171,7 @@
android:layout_margin="16dp" android:layout_margin="16dp"
android:baselineAligned="false" android:baselineAligned="false"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone"
android:weightSum="3"> android:weightSum="3">
<LinearLayout <LinearLayout