Code review
This commit is contained in:
parent
cbf0357467
commit
2f3f0c294c
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package im.vector.app.features.spaces
|
package im.vector.app.features.spaces
|
||||||
|
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
@ -28,6 +29,7 @@ import com.airbnb.mvrx.args
|
|||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.di.ActiveSessionHolder
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
import im.vector.app.core.di.ScreenComponent
|
import im.vector.app.core.di.ScreenComponent
|
||||||
|
import im.vector.app.core.dialogs.withColoredButton
|
||||||
import im.vector.app.core.extensions.setTextOrHide
|
import im.vector.app.core.extensions.setTextOrHide
|
||||||
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
|
import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
|
||||||
import im.vector.app.databinding.BottomSheetSpaceSettingsBinding
|
import im.vector.app.databinding.BottomSheetSpaceSettingsBinding
|
||||||
@ -81,7 +83,7 @@ class SpaceSettingsMenuBottomSheet : VectorBaseBottomSheetDialogFragment<BottomS
|
|||||||
injector.inject(this)
|
injector.inject(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
var isAdmin: Boolean = false
|
var isLastAdmin: Boolean = false
|
||||||
|
|
||||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetSpaceSettingsBinding {
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): BottomSheetSpaceSettingsBinding {
|
||||||
return BottomSheetSpaceSettingsBinding.inflate(inflater, container, false)
|
return BottomSheetSpaceSettingsBinding.inflate(inflater, container, false)
|
||||||
@ -117,7 +119,12 @@ class SpaceSettingsMenuBottomSheet : VectorBaseBottomSheetDialogFragment<BottomS
|
|||||||
views.invitePeople.isVisible = canInvite || roomSummary?.isPublic.orFalse()
|
views.invitePeople.isVisible = canInvite || roomSummary?.isPublic.orFalse()
|
||||||
views.addRooms.isVisible = canAddChild
|
views.addRooms.isVisible = canAddChild
|
||||||
|
|
||||||
isAdmin = powerLevelsHelper.getUserRole(session.myUserId) is Role.Admin
|
val isAdmin = powerLevelsHelper.getUserRole(session.myUserId) is Role.Admin
|
||||||
|
val otherAdminCount = roomSummary?.otherMemberIds
|
||||||
|
?.map { powerLevelsHelper.getUserRole(it) }
|
||||||
|
?.count { it is Role.Admin }
|
||||||
|
?: 0
|
||||||
|
isLastAdmin = isAdmin && otherAdminCount == 0
|
||||||
}.disposeOnDestroyView()
|
}.disposeOnDestroyView()
|
||||||
|
|
||||||
views.spaceBetaTag.setOnClickListener {
|
views.spaceBetaTag.setOnClickListener {
|
||||||
@ -150,36 +157,25 @@ class SpaceSettingsMenuBottomSheet : VectorBaseBottomSheetDialogFragment<BottomS
|
|||||||
views.leaveSpace.views.bottomSheetActionClickableZone.debouncedClicks {
|
views.leaveSpace.views.bottomSheetActionClickableZone.debouncedClicks {
|
||||||
val spaceSummary = activeSessionHolder.getSafeActiveSession()?.getRoomSummary(spaceArgs.spaceId)
|
val spaceSummary = activeSessionHolder.getSafeActiveSession()?.getRoomSummary(spaceArgs.spaceId)
|
||||||
?: return@debouncedClicks
|
?: return@debouncedClicks
|
||||||
val warningMessage: CharSequence = if (spaceSummary.otherMemberIds.isEmpty()) {
|
val warningMessage: CharSequence? = if (spaceSummary.otherMemberIds.isEmpty()) {
|
||||||
span {
|
span(getString(R.string.space_leave_prompt_msg_only_you)) {
|
||||||
+getString(R.string.space_leave_prompt_msg)
|
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
||||||
+"\n"
|
|
||||||
span(getString(R.string.space_leave_prompt_msg_only_you)) {
|
|
||||||
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (isAdmin) {
|
} else if (isLastAdmin) {
|
||||||
span {
|
span(getString(R.string.space_leave_prompt_msg_as_admin)) {
|
||||||
+getString(R.string.space_leave_prompt_msg)
|
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
||||||
+"\n"
|
|
||||||
span(getString(R.string.space_leave_prompt_msg_as_admin)) {
|
|
||||||
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (!spaceSummary.isPublic) {
|
} else if (!spaceSummary.isPublic) {
|
||||||
span {
|
span(getString(R.string.space_leave_prompt_msg_private)) {
|
||||||
+getString(R.string.space_leave_prompt_msg)
|
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
||||||
+"\n"
|
|
||||||
span(getString(R.string.space_leave_prompt_msg_private)) {
|
|
||||||
textColor = ContextCompat.getColor(requireContext(), R.color.riotx_destructive_accent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getString(R.string.space_leave_prompt_msg)
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
AlertDialog.Builder(requireContext())
|
AlertDialog.Builder(requireContext())
|
||||||
.setMessage(warningMessage)
|
.setMessage(warningMessage)
|
||||||
|
.setTitle(getString(R.string.space_leave_prompt_msg))
|
||||||
.setPositiveButton(R.string.leave) { _, _ ->
|
.setPositiveButton(R.string.leave) { _, _ ->
|
||||||
session.coroutineScope.launch {
|
session.coroutineScope.launch {
|
||||||
try {
|
try {
|
||||||
@ -192,6 +188,7 @@ class SpaceSettingsMenuBottomSheet : VectorBaseBottomSheetDialogFragment<BottomS
|
|||||||
}
|
}
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show()
|
.show()
|
||||||
|
.withColoredButton(DialogInterface.BUTTON_POSITIVE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +62,22 @@ class AddRoomListController @Inject constructor(
|
|||||||
|
|
||||||
var initialLoadOccurred = false
|
var initialLoadOccurred = false
|
||||||
|
|
||||||
|
var expanded: Boolean = true
|
||||||
|
set(value) {
|
||||||
|
if (value != field) {
|
||||||
|
field = value
|
||||||
|
requestForcedModelBuild()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var disabled: Boolean = false
|
||||||
|
set(value) {
|
||||||
|
if (value != field) {
|
||||||
|
field = value
|
||||||
|
requestForcedModelBuild()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun boundaryChange(boundary: ResultBoundaries) {
|
fun boundaryChange(boundary: ResultBoundaries) {
|
||||||
val boundaryHasLoadedSomething = boundary.frontLoaded || boundary.zeroItemLoaded
|
val boundaryHasLoadedSomething = boundary.frontLoaded || boundary.zeroItemLoaded
|
||||||
if (initialLoadOccurred != boundaryHasLoadedSomething) {
|
if (initialLoadOccurred != boundaryHasLoadedSomething) {
|
||||||
@ -88,6 +104,10 @@ class AddRoomListController @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun addModels(models: List<EpoxyModel<*>>) {
|
override fun addModels(models: List<EpoxyModel<*>>) {
|
||||||
|
if (disabled) {
|
||||||
|
super.addModels(emptyList())
|
||||||
|
return
|
||||||
|
}
|
||||||
val host = this
|
val host = this
|
||||||
val filteredModel = if (ignoreRooms == null) {
|
val filteredModel = if (ignoreRooms == null) {
|
||||||
models
|
models
|
||||||
@ -103,9 +123,14 @@ class AddRoomListController @Inject constructor(
|
|||||||
id("header")
|
id("header")
|
||||||
title(host.sectionName ?: "")
|
title(host.sectionName ?: "")
|
||||||
expanded(true)
|
expanded(true)
|
||||||
|
title(sectionName ?: "")
|
||||||
|
expanded(host.expanded)
|
||||||
|
listener {
|
||||||
|
host.expanded = !host.expanded
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
if (subHeaderText != null) {
|
if (expanded && subHeaderText != null) {
|
||||||
add(
|
add(
|
||||||
GenericPillItem_().apply {
|
GenericPillItem_().apply {
|
||||||
id("sub_header")
|
id("sub_header")
|
||||||
@ -115,11 +140,13 @@ class AddRoomListController @Inject constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.addModels(filteredModel)
|
if (expanded) {
|
||||||
if (!initialLoadOccurred) {
|
super.addModels(filteredModel)
|
||||||
add(
|
if (!initialLoadOccurred) {
|
||||||
RoomSelectionPlaceHolderItem_().apply { id("loading") }
|
add(
|
||||||
)
|
RoomSelectionPlaceHolderItem_().apply { id("loading") }
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,7 +156,7 @@ class AddRoomListController @Inject constructor(
|
|||||||
return RoomSelectionItem_().apply {
|
return RoomSelectionItem_().apply {
|
||||||
id(item.roomId)
|
id(item.roomId)
|
||||||
matrixItem(item.toMatrixItem())
|
matrixItem(item.toMatrixItem())
|
||||||
avatarRenderer(this@AddRoomListController.avatarRenderer)
|
avatarRenderer(host.avatarRenderer)
|
||||||
space(item.roomType == RoomType.SPACE)
|
space(item.roomType == RoomType.SPACE)
|
||||||
selected(host.selectedItems[item.roomId] ?: false)
|
selected(host.selectedItems[item.roomId] ?: false)
|
||||||
itemClickListener(DebouncedClickListener({
|
itemClickListener(DebouncedClickListener({
|
||||||
|
@ -28,7 +28,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import com.airbnb.mvrx.Loading
|
import com.airbnb.mvrx.Loading
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
|
||||||
import com.jakewharton.rxbinding3.appcompat.queryTextChanges
|
import com.jakewharton.rxbinding3.appcompat.queryTextChanges
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.cleanup
|
import im.vector.app.core.extensions.cleanup
|
||||||
@ -109,6 +108,10 @@ class SpaceAddRoomFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
}.disposeOnDestroyView()
|
}.disposeOnDestroyView()
|
||||||
|
|
||||||
|
viewModel.selectSubscribe(this, SpaceAddRoomsState::shouldShowDMs) {
|
||||||
|
dmEpoxyController.disabled = !it
|
||||||
|
}.disposeOnDestroyView()
|
||||||
|
|
||||||
views.createNewRoom.debouncedClicks {
|
views.createNewRoom.debouncedClicks {
|
||||||
sharedViewModel.handle(SpaceManagedSharedAction.CreateRoom)
|
sharedViewModel.handle(SpaceManagedSharedAction.CreateRoom)
|
||||||
}
|
}
|
||||||
@ -125,11 +128,11 @@ class SpaceAddRoomFragment @Inject constructor(
|
|||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
is SpaceAddRoomsViewEvents.SaveFailed -> {
|
is SpaceAddRoomsViewEvents.SaveFailed -> {
|
||||||
showErrorInSnackbar(it.reason)
|
showErrorInSnackbar(it.reason)
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
SpaceAddRoomsViewEvents.SavedDone -> {
|
SpaceAddRoomsViewEvents.SavedDone -> {
|
||||||
sharedViewModel.handle(SpaceManagedSharedAction.HandleBack)
|
sharedViewModel.handle(SpaceManagedSharedAction.HandleBack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,20 +189,18 @@ class SpaceAddRoomFragment @Inject constructor(
|
|||||||
concatAdapter.addAdapter(roomEpoxyController.adapter)
|
concatAdapter.addAdapter(roomEpoxyController.adapter)
|
||||||
concatAdapter.addAdapter(spaceEpoxyController.adapter)
|
concatAdapter.addAdapter(spaceEpoxyController.adapter)
|
||||||
|
|
||||||
val shouldShowDm = withState(viewModel) { it.shouldShowDMs }
|
// This controller can be disabled depending on the space type (public or not)
|
||||||
if (shouldShowDm) {
|
viewModel.updatableDMLivePageResult.liveBoundaries.observe(viewLifecycleOwner) {
|
||||||
viewModel.updatableDMLivePageResult.liveBoundaries.observe(viewLifecycleOwner) {
|
dmEpoxyController.boundaryChange(it)
|
||||||
dmEpoxyController.boundaryChange(it)
|
|
||||||
}
|
|
||||||
viewModel.updatableDMLivePageResult.livePagedList.observe(viewLifecycleOwner) {
|
|
||||||
dmEpoxyController.totalSize = it.size
|
|
||||||
dmEpoxyController.submitList(it)
|
|
||||||
}
|
|
||||||
dmEpoxyController.sectionName = getString(R.string.direct_chats_header)
|
|
||||||
dmEpoxyController.listener = this
|
|
||||||
|
|
||||||
concatAdapter.addAdapter(dmEpoxyController.adapter)
|
|
||||||
}
|
}
|
||||||
|
viewModel.updatableDMLivePageResult.livePagedList.observe(viewLifecycleOwner) {
|
||||||
|
dmEpoxyController.totalSize = it.size
|
||||||
|
dmEpoxyController.submitList(it)
|
||||||
|
}
|
||||||
|
dmEpoxyController.sectionName = getString(R.string.direct_chats_header)
|
||||||
|
dmEpoxyController.listener = this
|
||||||
|
|
||||||
|
concatAdapter.addAdapter(dmEpoxyController.adapter)
|
||||||
|
|
||||||
views.roomList.adapter = concatAdapter
|
views.roomList.adapter = concatAdapter
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user