From 615133cc00c1e7f05e9002fb59396fd1e5785183 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Wed, 24 Jul 2024 07:55:12 +0000 Subject: [PATCH] Fix the scrolling behavior in Settings homepage - we always scroll to top of homepage first. - if target position already exist on screen, we don't need to scroll. - if target position doesn't exist on screen, scroll to the target position. Bug: 349696107 Test: manual Flag: com.android.settings.flags.homepage_revamp Change-Id: I18c314d19eb38f22f799cb8bf087bf71f4f7d466 --- .../widget/HighlightableTopLevelPreferenceAdapter.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java index 9ddec5cb0c5..15e83de9149 100644 --- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java +++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java @@ -17,6 +17,7 @@ package com.android.settings.widget; import android.content.Context; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.util.Log; @@ -212,6 +213,14 @@ public class HighlightableTopLevelPreferenceAdapter extends RoundCornerPreferenc // Scroll to the top to reset the position. mRecyclerView.nestedScrollBy(0, -mRecyclerView.getHeight()); + // get the visible area of the recycler view + Rect rvRect = new Rect(); + mRecyclerView.getGlobalVisibleRect(rvRect); + if (Flags.homepageRevamp() && view.getBottom() <= rvRect.height()) { + // the request position already fully visible in the visible area + return; + } + final int scrollY = view.getTop(); if (scrollY > 0) { mRecyclerView.nestedScrollBy(0, scrollY);