Remember scroll position for internal settings.
This commit is contained in:
parent
a0c48bed6e
commit
490e29f758
2 changed files with 35 additions and 1 deletions
|
@ -4,9 +4,12 @@ import android.content.ClipData
|
|||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import org.signal.core.util.AppUtil
|
||||
import org.signal.core.util.concurrent.SignalExecutors
|
||||
|
@ -51,13 +54,35 @@ class InternalSettingsFragment : DSLSettingsFragment(R.string.preferences__inter
|
|||
|
||||
private lateinit var viewModel: InternalSettingsViewModel
|
||||
|
||||
private var scrollToPosition: Int = 0
|
||||
private val layoutManager: LinearLayoutManager?
|
||||
get() = recyclerView?.layoutManager as? LinearLayoutManager
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
val firstVisiblePosition: Int? = layoutManager?.findFirstVisibleItemPosition()
|
||||
if (firstVisiblePosition != null) {
|
||||
SignalStore.internalValues().lastScrollPosition = firstVisiblePosition
|
||||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
scrollToPosition = SignalStore.internalValues().lastScrollPosition
|
||||
}
|
||||
|
||||
override fun bindAdapter(adapter: MappingAdapter) {
|
||||
val repository = InternalSettingsRepository(requireContext())
|
||||
val factory = InternalSettingsViewModel.Factory(repository)
|
||||
viewModel = ViewModelProvider(this, factory)[InternalSettingsViewModel::class.java]
|
||||
|
||||
viewModel.state.observe(viewLifecycleOwner) {
|
||||
adapter.submitList(getConfiguration(it).toMappingModelList())
|
||||
adapter.submitList(getConfiguration(it).toMappingModelList()) {
|
||||
if (scrollToPosition != 0) {
|
||||
layoutManager?.scrollToPositionWithOffset(scrollToPosition, 0)
|
||||
scrollToPosition = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ public final class InternalValues extends SignalStoreValues {
|
|||
public static final String SHAKE_TO_REPORT = "internal.shake_to_report";
|
||||
public static final String DISABLE_STORAGE_SERVICE = "internal.disable_storage_service";
|
||||
public static final String FORCE_WEBSOCKET_MODE = "internal.force_websocket_mode";
|
||||
public static final String LAST_SCROLL_POSITION = "internal.last_scroll_position";
|
||||
|
||||
InternalValues(KeyValueStore store) {
|
||||
super(store);
|
||||
|
@ -176,4 +177,12 @@ public final class InternalValues extends SignalStoreValues {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setLastScrollPosition(int position) {
|
||||
putInteger(LAST_SCROLL_POSITION, position);
|
||||
}
|
||||
|
||||
public int getLastScrollPosition() {
|
||||
return getInteger(LAST_SCROLL_POSITION, 0);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue