From 8cddd45948ef9525ebbb5c66e8758f3b324fcef4 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Thu, 14 Jun 2018 14:48:16 +0200 Subject: [PATCH] Uses yet another, more reliable solution for restoring selected buffer state --- .../quasseldroid/ui/chat/ChatActivity.kt | 66 ++++++++++--------- .../chat/buffers/BufferViewConfigFragment.kt | 10 +-- .../viewmodel/QuasselViewModel.kt | 1 - 3 files changed, 40 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index 875e91278..97fd0b1e1 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -55,6 +55,7 @@ import de.kuschku.libquassel.protocol.Message_Type import de.kuschku.libquassel.protocol.NetworkId import de.kuschku.libquassel.protocol.message.HandshakeMessage import de.kuschku.libquassel.session.Error +import de.kuschku.libquassel.session.ISession import de.kuschku.libquassel.util.Optional import de.kuschku.libquassel.util.flag.and import de.kuschku.libquassel.util.flag.hasFlag @@ -140,7 +141,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) - if (intent != null && (intent.flags and Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { + if (intent != null) { when { intent.type == "text/plain" -> { chatlineFragment?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT)) @@ -172,39 +173,39 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc val networkId = intent.getIntExtra(KEY_NETWORK_ID, -1) val channel = intent.getStringExtra(KEY_CHANNEL) - viewModel.session.value?.orNull()?.also { session -> - val info = session.bufferSyncer?.find( - bufferName = channel, - networkId = networkId, - type = Buffer_Type.of(Buffer_Type.ChannelBuffer) - ) + viewModel.session.filter(Optional<ISession>::isPresent).firstElement().subscribe { + it.orNull()?.also { session -> + val info = session.bufferSyncer?.find( + bufferName = channel, + networkId = networkId, + type = Buffer_Type.of(Buffer_Type.ChannelBuffer) + ) - if (info != null) { - viewModel.buffer.onNext(info.bufferId) - viewModel.bufferOpened.onNext(Unit) - } else { - viewModel.allBuffers.map { - listOfNotNull(it.find { - it.networkId == networkId && - it.bufferName == channel && - it.type.hasFlag(Buffer_Type.ChannelBuffer) - }) - }.filter { - it.isNotEmpty() - }.firstElement().toLiveData().observe(this, Observer { - it?.firstOrNull()?.let { info -> - viewModel.buffer.onNext(info.bufferId) - viewModel.bufferOpened.onNext(Unit) + if (info != null) { + ChatActivity.launch(this, bufferId = info.bufferId) + } else { + viewModel.allBuffers.map { + listOfNotNull(it.find { + it.networkId == networkId && + it.bufferName == channel && + it.type.hasFlag(Buffer_Type.ChannelBuffer) + }) + }.filter { + it.isNotEmpty() + }.firstElement().subscribe { + it?.firstOrNull()?.let { info -> + ChatActivity.launch(this, bufferId = info.bufferId) + } } - }) - session.bufferSyncer?.find( - networkId = networkId, - type = Buffer_Type.of(Buffer_Type.StatusBuffer) - )?.let { statusInfo -> - session.rpcHandler?.sendInput( - statusInfo, "/join $channel" - ) + session.bufferSyncer?.find( + networkId = networkId, + type = Buffer_Type.of(Buffer_Type.StatusBuffer) + )?.let { statusInfo -> + session.rpcHandler?.sendInput( + statusInfo, "/join $channel" + ) + } } } } @@ -281,7 +282,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc }) }.toLiveData().observe(this, Observer { info -> info?.orNull()?.let { - viewModel.buffer.onNext(it.bufferId) + ChatActivity.launch(this, bufferId = it.bufferId) } }) @@ -926,6 +927,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc startedSelection = true connectedAccount = -1L restoredDrawerState = false + ChatActivity.launch(this, bufferId = Int.MAX_VALUE) viewModel.resetAccount() } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt index a23db1f5f..893caf240 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt @@ -44,6 +44,7 @@ import de.kuschku.quasseldroid.persistence.AccountDatabase import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.MessageSettings +import de.kuschku.quasseldroid.ui.chat.ChatActivity import de.kuschku.quasseldroid.ui.coresettings.network.NetworkEditActivity import de.kuschku.quasseldroid.util.ColorContext import de.kuschku.quasseldroid.util.avatars.AvatarHelper @@ -457,12 +458,13 @@ class BufferViewConfigFragment : ServiceBoundFragment() { outState.putParcelable(KEY_STATE_LIST, chatList.layoutManager.onSaveInstanceState()) } - private fun clickListener(it: BufferId) { + private fun clickListener(bufferId: BufferId) { if (actionMode != null) { - longClickListener(it) + longClickListener(bufferId) } else { - viewModel.buffer.onNext(it) - viewModel.bufferOpened.onNext(Unit) + context?.let { + ChatActivity.launch(it, bufferId = bufferId) + } } } diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt index a04c36e95..25ada760b 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -44,7 +44,6 @@ import java.util.concurrent.TimeUnit class QuasselViewModel : ViewModel() { fun resetAccount() { - buffer.onNext(Int.MAX_VALUE) bufferViewConfigId.onNext(-1) selectedMessages.onNext(emptyMap()) expandedMessages.onNext(emptySet()) -- GitLab