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

Commit 4b705596 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Ensure search highlight position when scheduled runnable starts" am:...

Merge "Ensure search highlight position when scheduled runnable starts" am: fcd941b4 am: c54246e0 am: c2a13261

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2263782



Change-Id: Iab157dbabcc85ce9f3b777729f450b5fa4a104eb
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 67ad9cd2 c2a13261
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);