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 53e24ff5253f5872c66ac61659f9323bae18cb10..29aaabcee5e655d8c21be929bfb175620686b015 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 @@ -538,18 +538,22 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc override fun onSaveInstanceState(outState: Bundle?) { super.onSaveInstanceState(outState) outState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1) + outState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1) } override fun onSaveInstanceState(outState: Bundle?, outPersistentState: PersistableBundle?) { super.onSaveInstanceState(outState, outPersistentState) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { outPersistentState?.putInt("OPEN_BUFFER", viewModel.buffer.value ?: -1) + outPersistentState?.putInt("OPEN_BUFFERVIEWCONFIG", viewModel.bufferViewConfigId.value ?: -1) } } override fun onRestoreInstanceState(savedInstanceState: Bundle?) { super.onRestoreInstanceState(savedInstanceState) viewModel.buffer.onNext(savedInstanceState?.getInt("OPEN_BUFFER", -1) ?: -1) + viewModel.bufferViewConfigId.onNext(savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", -1) + ?: -1) } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @@ -557,8 +561,16 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc persistentState: PersistableBundle?) { super.onRestoreInstanceState(savedInstanceState, persistentState) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val fallback = persistentState?.getInt("OPEN_BUFFER", -1) ?: -1 - viewModel.buffer.onNext(savedInstanceState?.getInt("OPEN_BUFFER", fallback) ?: fallback) + val fallbackBuffer = persistentState?.getInt("OPEN_BUFFER", -1) ?: -1 + viewModel.buffer.onNext( + savedInstanceState?.getInt("OPEN_BUFFER", fallbackBuffer) + ?: fallbackBuffer + ) + val fallbackBufferViewConfigId = persistentState?.getInt("OPEN_BUFFERVIEWCONFIG", -1) ?: -1 + viewModel.bufferViewConfigId.onNext( + savedInstanceState?.getInt("OPEN_BUFFERVIEWCONFIG", fallbackBufferViewConfigId) + ?: fallbackBufferViewConfigId + ) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt index 84022e8e64b695cc695e05abfa78a57c4b0adddc..c21c3b88408a4623d0fb86b6399e7aa48bfaae6b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt @@ -42,6 +42,8 @@ class BufferViewConfigAdapter : notifyDataSetChanged() } + fun indexOf(id: Int) = data.indexOfFirst { it.bufferViewId() == id } + override fun isEmpty() = data.isEmpty() override fun onBindViewHolder(holder: BufferViewConfigViewHolder, position: Int) = 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 6c10d9f337089abec65e705503307f62478420cf..c42ac4d621207d7e0ff39cc5bab66cede14955cf 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 @@ -207,23 +207,31 @@ class BufferViewConfigFragment : ServiceBoundFragment() { val view = inflater.inflate(R.layout.fragment_chat_list, container, false) ButterKnife.bind(this, view) + var hasSetBufferViewConfigId = false val adapter = BufferViewConfigAdapter() viewModel.bufferViewConfigs.switchMap { combineLatest(it.map(BufferViewConfig::liveUpdates)) }.toLiveData().observe(this, Observer { if (it != null) { adapter.submitList(it) + if (!hasSetBufferViewConfigId) { + chatListSpinner.setSelection(adapter.indexOf(viewModel.bufferViewConfigId.value)) + hasSetBufferViewConfigId = true + } } }) chatListSpinner.adapter = adapter chatListSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(p0: AdapterView<*>?) { - viewModel.bufferViewConfigId.onNext(-1) + override fun onNothingSelected(adapter: AdapterView<*>?) { + if (hasSetBufferViewConfigId) + viewModel.bufferViewConfigId.onNext(-1) } - override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { - viewModel.bufferViewConfigId.onNext(adapter.getItem(p2)?.bufferViewId() ?: -1) + override fun onItemSelected(adapter: AdapterView<*>?, element: View?, position: Int, + id: Long) { + if (hasSetBufferViewConfigId) + viewModel.bufferViewConfigId.onNext(id.toInt()) } } 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 2a2b52f5db451f8745ba99058b988c4afb51699a..faaeeae8d95aa220d0f3d844b583150e9dfede37 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -32,6 +32,8 @@ import de.kuschku.libquassel.session.Backend import de.kuschku.libquassel.session.ISession import de.kuschku.libquassel.session.SessionManager import de.kuschku.libquassel.util.Optional +import de.kuschku.libquassel.util.compatibility.LoggingHandler +import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log import de.kuschku.libquassel.util.flag.and import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.libquassel.util.helpers.* @@ -45,6 +47,10 @@ import io.reactivex.subjects.BehaviorSubject import java.util.concurrent.TimeUnit class QuasselViewModel : ViewModel() { + init { + log(LoggingHandler.LogLevel.ERROR, "DEBUG", "QuasselViewModel created! ${hashCode()}") + } + val backendWrapper = BehaviorSubject.createDefault(Observable.empty<Optional<Backend>>()) val selectedMessages = BehaviorSubject.createDefault(emptyMap<MsgId, FormattedMessage>())