Skip to content
Snippets Groups Projects
Commit df899606 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Only show new errors when reopening window, restore state correctly

parent cb1da569
No related branches found
No related tags found
No related merge requests found
......@@ -167,8 +167,8 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
drawerToggle.syncState()
}
viewModel.errors_liveData.observe(this, Observer { optional ->
optional?.orNull().let {
viewModel.errors.observe(this, Observer { error ->
error?.let {
when (it) {
is HandshakeMessage.ClientInitReject ->
MaterialDialog.Builder(this)
......
......@@ -300,9 +300,21 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
}
chatList.itemAnimator = DefaultItemAnimator()
chatList.setItemViewCacheSize(10)
savedInstanceState?.run {
chatList.layoutManager.onRestoreInstanceState(getParcelable(KEY_STATE_LIST))
chatListSpinner.onRestoreInstanceState(getParcelable(KEY_STATE_SPINNER))
}
return view
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putParcelable(KEY_STATE_LIST, chatList.layoutManager.onSaveInstanceState())
outState.putParcelable(KEY_STATE_SPINNER, chatListSpinner.onSaveInstanceState())
}
private val clickListener: ((BufferId) -> Unit)? = {
if (actionMode != null) {
longClickListener?.invoke(it)
......@@ -319,4 +331,9 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
actionMode?.finish()
}
}
companion object {
private const val KEY_STATE_LIST = "KEY_STATE_LIST"
private const val KEY_STATE_SPINNER = "KEY_STATE_SPINNER"
}
}
......@@ -225,6 +225,10 @@ class MessageListFragment : ServiceBoundFragment() {
database.message().lastMsgId(it)
}
viewModel.buffer.toLiveData().observe(this, Observer { bufferId ->
swipeRefreshLayout.isEnabled = (bufferId != null || bufferId != -1)
})
var previousVisible = -1
viewModel.buffer.toFlowable(BackpressureStrategy.LATEST).switchMap { buffer ->
database.filtered().listenRx(accountId, buffer).switchMap { filtered ->
......@@ -296,9 +300,19 @@ class MessageListFragment : ServiceBoundFragment() {
})
scrollDown.hide()
scrollDown.setOnClickListener { messageList.scrollToPosition(0) }
savedInstanceState?.run {
messageList.layoutManager.onRestoreInstanceState(getParcelable(KEY_STATE_LIST))
}
return view
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putParcelable(KEY_STATE_LIST, messageList.layoutManager.onSaveInstanceState())
}
private fun markAsRead(bufferSyncer: BufferSyncer, buffer: BufferId, lastMessageId: MsgId?) {
bufferSyncer.requestMarkBufferAsRead(buffer)
if (lastMessageId != null)
......@@ -346,4 +360,7 @@ class MessageListFragment : ServiceBoundFragment() {
}
}
companion object {
private const val KEY_STATE_LIST = "KEY_STATE_LIST"
}
}
......@@ -65,9 +65,18 @@ class NickListFragment : ServiceBoundFragment() {
}
}.toLiveData().observe(this, Observer(nickListAdapter::submitList))
savedInstanceState?.run {
nickList.layoutManager.onRestoreInstanceState(getParcelable(KEY_STATE_LIST))
}
return view
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putParcelable(KEY_STATE_LIST, nickList.layoutManager.onSaveInstanceState())
}
private val clickListener: ((String) -> Unit)? = { nick ->
viewModel.bufferData.value?.info?.let(BufferInfo::networkId)?.let { networkId ->
val intent = Intent(requireContext(), InfoActivity::class.java)
......@@ -79,4 +88,8 @@ class NickListFragment : ServiceBoundFragment() {
startActivity(intent)
}
}
companion object {
private const val KEY_STATE_LIST = "KEY_STATE_LIST"
}
}
\ No newline at end of file
......@@ -5,6 +5,8 @@ import de.kuschku.libquassel.protocol.NetworkId
import de.kuschku.libquassel.protocol.message.HandshakeMessage
import de.kuschku.libquassel.quassel.QuasselFeatures
import de.kuschku.libquassel.quassel.syncables.*
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
import java.io.Closeable
......@@ -30,7 +32,7 @@ interface ISession : Closeable {
val rpcHandler: RpcHandler?
val initStatus: Observable<Pair<Int, Int>>
val error: Observable<HandshakeMessage>
val error: Flowable<HandshakeMessage>
val lag: Observable<Long>
......@@ -39,6 +41,7 @@ interface ISession : Closeable {
companion object {
val NULL = object : ISession {
override val error = BehaviorSubject.create<HandshakeMessage>()
.toFlowable(BackpressureStrategy.BUFFER)
override val state = BehaviorSubject.createDefault(ConnectionState.DISCONNECTED)
override val features: Features = Features(QuasselFeatures.empty(), QuasselFeatures.empty())
override val sslSession: SSLSession? = null
......
......@@ -7,7 +7,9 @@ import de.kuschku.libquassel.quassel.ExtendedFeature
import de.kuschku.libquassel.quassel.QuasselFeatures
import de.kuschku.libquassel.quassel.syncables.*
import de.kuschku.libquassel.util.compatibility.HandlerService
import io.reactivex.BackpressureStrategy
import io.reactivex.subjects.BehaviorSubject
import io.reactivex.subjects.PublishSubject
import org.threeten.bp.Instant
import javax.net.ssl.X509TrustManager
......@@ -31,7 +33,8 @@ class Session(
)
override val state = coreConnection.state
override val error = BehaviorSubject.create<HandshakeMessage>()
private val _error = PublishSubject.create<HandshakeMessage>()
override val error = _error.toFlowable(BackpressureStrategy.BUFFER)
override val aliasManager = AliasManager(this)
override val backlogManager = BacklogManager(this, backlogStorage)
......@@ -62,7 +65,7 @@ class Session(
if (f.coreConfigured == true) {
login()
} else {
error.onNext(f)
_error.onNext(f)
}
return true
}
......@@ -87,17 +90,17 @@ class Session(
}
override fun handle(f: HandshakeMessage.ClientInitReject): Boolean {
error.onNext(f)
_error.onNext(f)
return true
}
override fun handle(f: HandshakeMessage.CoreSetupReject): Boolean {
error.onNext(f)
_error.onNext(f)
return true
}
override fun handle(f: HandshakeMessage.ClientLoginReject): Boolean {
error.onNext(f)
_error.onNext(f)
return true
}
......
......@@ -10,6 +10,8 @@ import de.kuschku.libquassel.util.compatibility.HandlerService
import de.kuschku.libquassel.util.compatibility.LoggingHandler
import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
import de.kuschku.libquassel.util.helpers.or
import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.functions.BiFunction
import io.reactivex.subjects.BehaviorSubject
......@@ -75,8 +77,8 @@ class SessionManager(
else
lastSession
}
override val error: Observable<HandshakeMessage>
get() = inProgressSession.switchMap(ISession::error)
override val error: Flowable<HandshakeMessage>
get() = inProgressSession.toFlowable(BackpressureStrategy.LATEST).switchMap(ISession::error)
val connectionProgress: Observable<Triple<ConnectionState, Int, Int>> = Observable.combineLatest(
state, initStatus,
......
......@@ -19,6 +19,7 @@ import de.kuschku.libquassel.util.and
import de.kuschku.libquassel.util.hasFlag
import de.kuschku.libquassel.util.helpers.*
import de.kuschku.quasseldroid.util.helper.combineLatest
import de.kuschku.quasseldroid.util.helper.switchMapNotNull
import de.kuschku.quasseldroid.util.helper.toLiveData
import de.kuschku.quasseldroid.viewmodel.data.*
import io.reactivex.Observable
......@@ -71,8 +72,9 @@ class QuasselViewModel : ViewModel() {
}
}
val errors = sessionManager.mapSwitchMap(SessionManager::error)
val errors_liveData = errors.toLiveData()
val errors = sessionManager.toLiveData().switchMapNotNull {
it.orNull()?.error?.toLiveData()
}
/**
* An observable of the changes of the markerline, as pairs of `(old, new)`
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment