Public rooms little rework

This commit is contained in:
Benoit Marty
2019-06-03 16:04:22 +02:00
parent 3b12f5eec7
commit c1fa728c24
10 changed files with 155 additions and 107 deletions

View File

@ -24,6 +24,7 @@ import com.airbnb.epoxy.EpoxyModelClass
import im.vector.riotredesign.R
import im.vector.riotredesign.core.epoxy.VectorEpoxyHolder
import im.vector.riotredesign.core.epoxy.VectorEpoxyModel
import im.vector.riotredesign.core.extensions.setTextOrHide
import im.vector.riotredesign.core.platform.ButtonStateView
import im.vector.riotredesign.features.home.AvatarRenderer
@ -39,6 +40,12 @@ abstract class PublicRoomItem : VectorEpoxyModel<PublicRoomItem.Holder>() {
@EpoxyAttribute
var roomName: String? = null
@EpoxyAttribute
var roomAlias: String? = null
@EpoxyAttribute
var roomTopic: String? = null
@EpoxyAttribute
var nbOfMembers: Int = 0
@ -56,6 +63,8 @@ abstract class PublicRoomItem : VectorEpoxyModel<PublicRoomItem.Holder>() {
AvatarRenderer.render(avatarUrl, roomId!!, roomName, holder.avatarView)
holder.nameView.text = roomName
holder.aliasView.setTextOrHide(roomAlias)
holder.topicView.setTextOrHide(roomTopic)
// TODO Use formatter for big numbers?
holder.counterView.text = nbOfMembers.toString()
@ -85,6 +94,8 @@ abstract class PublicRoomItem : VectorEpoxyModel<PublicRoomItem.Holder>() {
val avatarView by bind<ImageView>(R.id.itemPublicRoomAvatar)
val nameView by bind<TextView>(R.id.itemPublicRoomName)
val aliasView by bind<TextView>(R.id.itemPublicRoomAlias)
val topicView by bind<TextView>(R.id.itemPublicRoomTopic)
val counterView by bind<TextView>(R.id.itemPublicRoomMembersCount)
val buttonState by bind<ButtonStateView>(R.id.itemPublicRoomButtonState)

View File

@ -82,6 +82,8 @@ class PublicRoomsController(private val stringProvider: StringProvider,
roomId(publicRoom.roomId)
avatarUrl(publicRoom.avatarUrl)
roomName(publicRoom.name)
roomAlias(publicRoom.canonicalAlias)
roomTopic(publicRoom.topic)
nbOfMembers(publicRoom.numJoinedMembers)
val joinState = when {

View File

@ -17,6 +17,7 @@
package im.vector.riotredesign.features.roomdirectory
import android.os.Bundle
import android.view.MenuItem
import android.view.View
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
@ -31,7 +32,6 @@ import im.vector.riotredesign.core.error.ErrorFormatter
import im.vector.riotredesign.core.extensions.addFragmentToBackstack
import im.vector.riotredesign.core.platform.VectorBaseFragment
import im.vector.riotredesign.features.roomdirectory.picker.RoomDirectoryPickerFragment
import im.vector.riotredesign.features.roomdirectory.roompreview.RoomPreviewActivity
import io.reactivex.rxkotlin.subscribeBy
import kotlinx.android.synthetic.main.fragment_public_rooms.*
import org.koin.android.ext.android.inject
@ -46,12 +46,20 @@ import java.util.concurrent.TimeUnit
* - When filtering more (when entering new chars), we could filter on result we already have, during the new server request, to avoid empty screen effect
*
* TODO For Nad:
* Display number of rooms?
* Picto size are not correct
* Where I put the room directory picker?
* World Readable badge
* Guest can join badge
* Display number of rooms? -> Not displayed
* Picto size are not correct -> Fixed
* Where I put the room directory picker? -> Menu
* World Readable badge -> not displayed
* Guest can join badge -> not displayed
* Create Room -> Wait for screen
*
*
* Home
* -> FAB on first screen
* -> Counter -> Ok
*
*
* @Benoit: Provide list for event type in last message on home
*/
class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback {
@ -61,6 +69,8 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback
override fun getLayoutResId() = R.layout.fragment_public_rooms
override fun getMenuRes() = R.menu.menu_room_directory
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -84,10 +94,6 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback
vectorBaseActivity.notImplemented()
}
publicRoomsChangeDirectory.setOnClickListener {
vectorBaseActivity.addFragmentToBackstack(RoomDirectoryPickerFragment(), R.id.simpleFragmentContainer)
}
viewModel.joinRoomErrorLiveData.observe(this, Observer {
it.getContentIfNotHandled()?.let { throwable ->
Snackbar.make(publicRoomsCoordinator, errorFormatter.toHumanReadable(throwable), Snackbar.LENGTH_SHORT)
@ -96,6 +102,17 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback
})
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_room_directory_change_protocol -> {
vectorBaseActivity.addFragmentToBackstack(RoomDirectoryPickerFragment(), R.id.simpleFragmentContainer)
true
}
else ->
super.onOptionsItemSelected(item)
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
bindScope(getOrCreateScope(RoomDirectoryModule.ROOM_DIRECTORY_SCOPE))
@ -146,8 +163,5 @@ class PublicRoomsFragment : VectorBaseFragment(), PublicRoomsController.Callback
override fun invalidate() = withState(viewModel) { state ->
// Populate list with Epoxy
publicRoomsController.setData(state)
// Directory name
publicRoomsDirectoryName.text = state.roomDirectoryDisplayName
}
}

View File

@ -61,7 +61,7 @@ class RoomDirectoryPickerFragment : VectorBaseFragment(), RoomDirectoryPickerCon
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.action_add_custom_hs) {
// TODO
vectorBaseActivity.notImplemented()
vectorBaseActivity.notImplemented("Entering custom homeserver")
return true
}