forked from GitHub-Mirror/riotX-android
Start introducing a way to open timeline around an event
This commit is contained in:
@ -6,21 +6,22 @@ import android.support.v4.app.BundleCompat
|
||||
import android.support.v4.app.Fragment
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class FragmentArgumentDelegate<T : Any> : kotlin.properties.ReadWriteProperty<Fragment, T> {
|
||||
class FragmentArgumentDelegate<T : Any> : kotlin.properties.ReadWriteProperty<Fragment, T?> {
|
||||
|
||||
var value: T? = null
|
||||
|
||||
override operator fun getValue(thisRef: android.support.v4.app.Fragment, property: kotlin.reflect.KProperty<*>): T {
|
||||
override operator fun getValue(thisRef: android.support.v4.app.Fragment, property: kotlin.reflect.KProperty<*>): T? {
|
||||
if (value == null) {
|
||||
val args = thisRef.arguments
|
||||
?: throw IllegalStateException("Cannot read property ${property.name} if no arguments have been set")
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
value = args.get(property.name) as T
|
||||
value = args?.get(property.name) as T?
|
||||
}
|
||||
return value ?: throw IllegalStateException("Property ${property.name} could not be read")
|
||||
return value
|
||||
}
|
||||
|
||||
override operator fun setValue(thisRef: Fragment, property: KProperty<*>, value: T) {
|
||||
override operator fun setValue(thisRef: Fragment, property: KProperty<*>, value: T?) {
|
||||
if (value == null) return
|
||||
|
||||
if (thisRef.arguments == null) {
|
||||
thisRef.arguments = Bundle()
|
||||
}
|
||||
@ -42,7 +43,21 @@ class FragmentArgumentDelegate<T : Any> : kotlin.properties.ReadWriteProperty<Fr
|
||||
is Binder -> BundleCompat.putBinder(args, key, value)
|
||||
is android.os.Parcelable -> args.putParcelable(key, value)
|
||||
is java.io.Serializable -> args.putSerializable(key, value)
|
||||
else -> throw IllegalStateException("Type ${value.javaClass.canonicalName} of property ${property.name} is not supported")
|
||||
else -> throw IllegalStateException("Type ${value.javaClass.name} of property ${property.name} is not supported")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UnsafeFragmentArgumentDelegate<T : Any> : kotlin.properties.ReadWriteProperty<Fragment, T> {
|
||||
|
||||
private val innerDelegate = FragmentArgumentDelegate<T>()
|
||||
|
||||
override fun setValue(thisRef: Fragment, property: KProperty<*>, value: T) {
|
||||
innerDelegate.setValue(thisRef, property, value)
|
||||
}
|
||||
|
||||
override fun getValue(thisRef: Fragment, property: KProperty<*>): T {
|
||||
return innerDelegate.getValue(thisRef, property)!!
|
||||
}
|
||||
|
||||
}
|
@ -15,6 +15,7 @@ import im.vector.riotredesign.R
|
||||
import im.vector.riotredesign.core.platform.RiotFragment
|
||||
import im.vector.riotredesign.core.platform.ToolbarConfigurable
|
||||
import im.vector.riotredesign.core.utils.FragmentArgumentDelegate
|
||||
import im.vector.riotredesign.core.utils.UnsafeFragmentArgumentDelegate
|
||||
import im.vector.riotredesign.features.home.AvatarRenderer
|
||||
import im.vector.riotredesign.features.home.room.detail.timeline.TimelineEventController
|
||||
import kotlinx.android.synthetic.main.fragment_room_detail.*
|
||||
@ -25,16 +26,18 @@ class RoomDetailFragment : RiotFragment() {
|
||||
|
||||
companion object {
|
||||
|
||||
fun newInstance(roomId: String): RoomDetailFragment {
|
||||
fun newInstance(roomId: String, eventId: String? = null): RoomDetailFragment {
|
||||
return RoomDetailFragment().apply {
|
||||
this.roomId = roomId
|
||||
this.eventId = eventId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val matrix by inject<Matrix>()
|
||||
private val currentSession = matrix.currentSession
|
||||
private var roomId by FragmentArgumentDelegate<String>()
|
||||
private var roomId: String by UnsafeFragmentArgumentDelegate()
|
||||
private var eventId: String? by FragmentArgumentDelegate()
|
||||
private val timelineEventController by inject<TimelineEventController>(parameters = { ParameterList(roomId) })
|
||||
private lateinit var room: Room
|
||||
|
||||
@ -48,7 +51,7 @@ class RoomDetailFragment : RiotFragment() {
|
||||
setupRecyclerView()
|
||||
setupToolbar()
|
||||
room.loadRoomMembersIfNeeded()
|
||||
room.liveTimeline().observe(this, Observer { renderEvents(it) })
|
||||
room.timeline(eventId).observe(this, Observer { renderEvents(it) })
|
||||
room.roomSummary.observe(this, Observer { renderRoomSummary(it) })
|
||||
sendButton.setOnClickListener {
|
||||
val textMessage = composerEditText.text.toString()
|
||||
|
Reference in New Issue
Block a user