Merge "Ensure search highlight position when scheduled runnable starts" am: fcd941b4eb
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2263782 Change-Id: I3d0a338bb220705a255a7abc123d490ee19f44af Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -141,6 +141,8 @@ public class HighlightablePreferenceGroupAdapter extends PreferenceGroupAdapter
|
||||
return;
|
||||
}
|
||||
|
||||
// Highlight request accepted
|
||||
mHighlightRequested = true;
|
||||
// Collapse app bar after 300 milliseconds.
|
||||
if (appBarLayout != null) {
|
||||
root.postDelayed(() -> {
|
||||
@@ -152,17 +154,37 @@ public class HighlightablePreferenceGroupAdapter extends PreferenceGroupAdapter
|
||||
recyclerView.setItemAnimator(null);
|
||||
// Scroll to correct position after 600 milliseconds.
|
||||
root.postDelayed(() -> {
|
||||
mHighlightRequested = true;
|
||||
recyclerView.smoothScrollToPosition(position);
|
||||
mHighlightPosition = position;
|
||||
if (ensureHighlightPosition()) {
|
||||
recyclerView.smoothScrollToPosition(mHighlightPosition);
|
||||
}
|
||||
}, DELAY_HIGHLIGHT_DURATION_MILLIS);
|
||||
|
||||
// Highlight preference after 900 milliseconds.
|
||||
root.postDelayed(() -> {
|
||||
notifyItemChanged(position);
|
||||
if (ensureHighlightPosition()) {
|
||||
notifyItemChanged(mHighlightPosition);
|
||||
}
|
||||
}, DELAY_COLLAPSE_DURATION_MILLIS + DELAY_HIGHLIGHT_DURATION_MILLIS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure we highlight the real-wanted position in case of preference position already
|
||||
* changed when the delay time comes.
|
||||
*/
|
||||
private boolean ensureHighlightPosition() {
|
||||
if (TextUtils.isEmpty(mHighlightKey)) {
|
||||
return false;
|
||||
}
|
||||
final int position = getPreferenceAdapterPosition(mHighlightKey);
|
||||
final boolean allowHighlight = position >= 0;
|
||||
if (allowHighlight && mHighlightPosition != position) {
|
||||
Log.w(TAG, "EnsureHighlight: position has changed since last highlight request");
|
||||
// Make sure RecyclerView always uses latest correct position to avoid exceptions.
|
||||
mHighlightPosition = position;
|
||||
}
|
||||
return allowHighlight;
|
||||
}
|
||||
|
||||
public boolean isHighlightRequested() {
|
||||
return mHighlightRequested;
|
||||
}
|
||||
|
Reference in New Issue
Block a user