private void navigateToPreferenceScreen(@NonNull PreferenceScreen preference, boolean forward) {
if (preference.getKey() == null) {
throw new IllegalArgumentException("PreferenceScreen needs a non-null key.");
}
if (forward) {
String key = mFragment.getPreferenceScreen().getKey();
RecyclerView list = mFragment.getListView();
if (list != null) {
final View firstChild = list.getChildAt(0);
if (firstChild != null) {
int position = list.getChildAdapterPosition(firstChild);
int offset = firstChild.getTop();
mScrollPositions.put(key, new Pair<>(position, offset));
}
}
}
mFragment.setPreferenceScreen(preference);
if (!forward) {
String key = preference.getKey();
if (mScrollPositions.containsKey(key)) {
Pair<Integer, Integer> scroll = mScrollPositions.get(key);
final int position = scroll.first;
final int offset = scroll.second;
onRestoreScrollPosition(position, offset);
}
}
if (mCallbacks != null) {
mCallbacks.onNavigateToPreferenceScreen(preference);
}
}