Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcd941b4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Ensure search highlight position when scheduled runnable starts"

parents 8959f069 bb2fb2ff
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -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;
    }
+2 −2
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ public class HighlightablePreferenceGroupAdapterTest {
    }

    @Test
    public void adjustInitialExpandedChildCount_hasHightlightKey_shouldExpandAllChildren() {
    public void adjustInitialExpandedChildCount_hasHighlightKey_shouldExpandAllChildren() {
        final Bundle args = new Bundle();
        when(mFragment.getArguments()).thenReturn(args);
        args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, "testkey");
@@ -208,7 +208,7 @@ public class HighlightablePreferenceGroupAdapterTest {
    }

    @Test
    public void updateBackground_reuseHightlightedRowForNormalRow_shouldResetBackgroundAndTag() {
    public void updateBackground_reuseHighlightedRowForNormalRow_shouldResetBackgroundAndTag() {
        ReflectionHelpers.setField(mAdapter, "mHighlightPosition", 10);
        mViewHolder.itemView.setTag(R.id.preference_highlighted, true);