diff --git a/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemProgress.kt b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/BaseProfileMatrixItem.kt similarity index 65% rename from vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemProgress.kt rename to vector/src/main/java/im/vector/riotx/core/epoxy/profiles/BaseProfileMatrixItem.kt index 65eed2ef21..58005ac788 100644 --- a/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemProgress.kt +++ b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/BaseProfileMatrixItem.kt @@ -1,61 +1,51 @@ /* - * Copyright 2020 New Vector Ltd + * Copyright (c) 2020 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ package im.vector.riotx.core.epoxy.profiles import android.view.View -import android.widget.ImageView -import android.widget.TextView +import androidx.core.view.isVisible import com.airbnb.epoxy.EpoxyAttribute -import com.airbnb.epoxy.EpoxyModelClass import im.vector.matrix.android.api.crypto.RoomEncryptionTrustLevel import im.vector.matrix.android.api.util.MatrixItem -import im.vector.riotx.R -import im.vector.riotx.core.epoxy.VectorEpoxyHolder import im.vector.riotx.core.epoxy.VectorEpoxyModel import im.vector.riotx.core.extensions.setTextOrHide import im.vector.riotx.features.crypto.util.toImageRes import im.vector.riotx.features.home.AvatarRenderer -@EpoxyModelClass(layout = R.layout.item_profile_matrix_item_progress) -abstract class ProfileMatrixItemProgress : VectorEpoxyModel() { - +abstract class BaseProfileMatrixItem : VectorEpoxyModel() { @EpoxyAttribute lateinit var avatarRenderer: AvatarRenderer @EpoxyAttribute lateinit var matrixItem: MatrixItem - @EpoxyAttribute var userEncryptionTrustLevel: RoomEncryptionTrustLevel? = null + @EpoxyAttribute var editable: Boolean = true + @EpoxyAttribute + var userEncryptionTrustLevel: RoomEncryptionTrustLevel? = null @EpoxyAttribute var clickListener: View.OnClickListener? = null - override fun bind(holder: Holder) { + override fun bind(holder: T) { super.bind(holder) val bestName = matrixItem.getBestName() val matrixId = matrixItem.id .takeIf { it != bestName } // Special case for ThreePid fake matrix item .takeIf { it != "@" } + holder.view.setOnClickListener(clickListener?.takeIf { editable }) holder.titleView.text = bestName holder.subtitleView.setTextOrHide(matrixId) + holder.editableView.isVisible = editable avatarRenderer.render(matrixItem, holder.avatarImageView) holder.avatarDecorationImageView.setImageResource(userEncryptionTrustLevel.toImageRes()) } - - class Holder : VectorEpoxyHolder() { - val titleView by bind(R.id.matrixItemTitle) - val subtitleView by bind(R.id.matrixItemSubtitle) - val avatarImageView by bind(R.id.matrixItemAvatar) - val avatarDecorationImageView by bind(R.id.matrixItemAvatarDecoration) - } } diff --git a/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItem.kt b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItem.kt index b89da07984..f704c7dd7d 100644 --- a/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItem.kt +++ b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItem.kt @@ -20,43 +20,14 @@ package im.vector.riotx.core.epoxy.profiles import android.view.View import android.widget.ImageView import android.widget.TextView -import androidx.core.view.isVisible -import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass -import im.vector.matrix.android.api.crypto.RoomEncryptionTrustLevel -import im.vector.matrix.android.api.util.MatrixItem import im.vector.riotx.R import im.vector.riotx.core.epoxy.VectorEpoxyHolder -import im.vector.riotx.core.epoxy.VectorEpoxyModel -import im.vector.riotx.core.extensions.setTextOrHide -import im.vector.riotx.features.crypto.util.toImageRes -import im.vector.riotx.features.home.AvatarRenderer @EpoxyModelClass(layout = R.layout.item_profile_matrix_item) -abstract class ProfileMatrixItem : VectorEpoxyModel() { +abstract class ProfileMatrixItem : BaseProfileMatrixItem() { - @EpoxyAttribute lateinit var avatarRenderer: AvatarRenderer - @EpoxyAttribute lateinit var matrixItem: MatrixItem - @EpoxyAttribute var editable: Boolean = true - @EpoxyAttribute var userEncryptionTrustLevel: RoomEncryptionTrustLevel? = null - @EpoxyAttribute var clickListener: View.OnClickListener? = null - - override fun bind(holder: Holder) { - super.bind(holder) - val bestName = matrixItem.getBestName() - val matrixId = matrixItem.id - .takeIf { it != bestName } - // Special case for ThreePid fake matrix item - .takeIf { it != "@" } - holder.view.setOnClickListener(clickListener?.takeIf { editable }) - holder.titleView.text = bestName - holder.subtitleView.setTextOrHide(matrixId) - holder.editableView.isVisible = editable - avatarRenderer.render(matrixItem, holder.avatarImageView) - holder.avatarDecorationImageView.setImageResource(userEncryptionTrustLevel.toImageRes()) - } - - class Holder : VectorEpoxyHolder() { + open class Holder : VectorEpoxyHolder() { val titleView by bind(R.id.matrixItemTitle) val subtitleView by bind(R.id.matrixItemSubtitle) val avatarImageView by bind(R.id.matrixItemAvatar) diff --git a/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemWithProgress.kt b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemWithProgress.kt new file mode 100644 index 0000000000..1ad538ec6d --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/epoxy/profiles/ProfileMatrixItemWithProgress.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package im.vector.riotx.core.epoxy.profiles + +import android.widget.ProgressBar +import androidx.core.view.isVisible +import com.airbnb.epoxy.EpoxyAttribute +import com.airbnb.epoxy.EpoxyModelClass +import im.vector.riotx.R + +@EpoxyModelClass(layout = R.layout.item_profile_matrix_item_progress) +abstract class ProfileMatrixItemWithProgress : BaseProfileMatrixItem() { + + @EpoxyAttribute var inProgress: Boolean = true + + override fun bind(holder: Holder) { + super.bind(holder) + holder.progress.isVisible = inProgress + } + + class Holder : ProfileMatrixItem.Holder() { + val progress by bind(R.id.matrixItemProgress) + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedListMemberViewModel.kt similarity index 100% rename from vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberViewModel.kt rename to vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedListMemberViewModel.kt diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberListController.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberListController.kt index 605c8b2104..51801af187 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberListController.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/banned/RoomBannedMemberListController.kt @@ -22,8 +22,7 @@ import im.vector.matrix.android.api.util.toMatrixItem import im.vector.riotx.R import im.vector.riotx.core.epoxy.dividerItem import im.vector.riotx.core.epoxy.profiles.buildProfileSection -import im.vector.riotx.core.epoxy.profiles.profileMatrixItem -import im.vector.riotx.core.epoxy.profiles.profileMatrixItemProgress +import im.vector.riotx.core.epoxy.profiles.profileMatrixItemWithProgress import im.vector.riotx.core.extensions.join import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.resources.StringProvider @@ -58,19 +57,21 @@ class RoomBannedMemberListController @Inject constructor( bannedList.join( each = { _, roomMember -> - if (data.onGoingModerationAction.contains(roomMember.userId)) { - profileMatrixItemProgress { - id(roomMember.userId) - matrixItem(roomMember.toMatrixItem()) - avatarRenderer(avatarRenderer) - } - } else { - profileMatrixItem { - id(roomMember.userId) - matrixItem(roomMember.toMatrixItem()) - avatarRenderer(avatarRenderer) - clickListener { _ -> - callback?.onUnbanClicked(roomMember) + val actionInProgress = data.onGoingModerationAction.contains(roomMember.userId) + profileMatrixItemWithProgress { + id(roomMember.userId) + matrixItem(roomMember.toMatrixItem()) + avatarRenderer(avatarRenderer) + apply { + if (actionInProgress) { + inProgress(true) + editable(false) + } else { + inProgress(false) + editable(true) + clickListener { _ -> + callback?.onUnbanClicked(roomMember) + } } } } diff --git a/vector/src/main/res/layout/item_profile_matrix_item_progress.xml b/vector/src/main/res/layout/item_profile_matrix_item_progress.xml index 4e7fc9f177..ccc6f66518 100644 --- a/vector/src/main/res/layout/item_profile_matrix_item_progress.xml +++ b/vector/src/main/res/layout/item_profile_matrix_item_progress.xml @@ -80,9 +80,23 @@ style="?android:attr/progressBarStyle" android:layout_width="20dp" android:layout_height="20dp" + android:layout_marginEnd="8dp" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@id/matrixItemEditable" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" /> + + - + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible" />