Remember scroll position for internal settings.

main
Cody Henthorne 2022-10-26 13:47:28 -04:00 zatwierdzone przez Alex Hart
rodzic a0c48bed6e
commit 490e29f758
2 zmienionych plików z 35 dodań i 1 usunięć

Wyświetl plik

@ -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
}
}
}
}

Wyświetl plik

@ -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);
}
}