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

Commit e1be0e41 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Monitor the page scrolling jank for app list pages"

parents a1167c14 9f6c5bda
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.applications.manageapplications;
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_DRAGGING;
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;

import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_PAGE_SCROLL;
import static com.android.settings.ChangeIds.CHANGE_RESTRICT_SAW_INTENT;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BATTERY_OPTIMIZED;
@@ -86,6 +87,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.android.internal.compat.IPlatformCompat;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.settings.R;
import com.android.settings.Settings.AlarmsAndRemindersActivity;
import com.android.settings.Settings.AppBatteryUsageActivity;
@@ -1242,8 +1244,10 @@ public class ManageApplications extends InstrumentedFragment
        @Override
        public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
            final String className =
                    mManageApplications.getClass().getName() + "_" + mManageApplications.mListType;
            mRecyclerView = recyclerView;
            mOnScrollListener = new OnScrollListener(this);
            mOnScrollListener = new OnScrollListener(this, className);
            mRecyclerView.addOnScrollListener(mOnScrollListener);
        }

@@ -1803,11 +1807,15 @@ public class ManageApplications extends InstrumentedFragment
            private boolean mDelayNotifyDataChange;
            private ApplicationsAdapter mAdapter;
            private InputMethodManager mInputMethodManager;
            private InteractionJankMonitor mMonitor;
            private String mClassName;

            public OnScrollListener(ApplicationsAdapter adapter) {
            public OnScrollListener(ApplicationsAdapter adapter, String className) {
                mAdapter = adapter;
                mInputMethodManager = mAdapter.mContext.getSystemService(
                        InputMethodManager.class);
                mMonitor = InteractionJankMonitor.getInstance();
                mClassName = className;
            }

            @Override
@@ -1822,6 +1830,15 @@ public class ManageApplications extends InstrumentedFragment
                        mInputMethodManager.hideSoftInputFromWindow(recyclerView.getWindowToken(),
                                0);
                    }
                    // Start jank monitoring during page scrolling.
                    final InteractionJankMonitor.Configuration.Builder builder =
                            InteractionJankMonitor.Configuration.Builder.withView(
                                            CUJ_SETTINGS_PAGE_SCROLL, recyclerView)
                                    .setTag(mClassName);
                    mMonitor.begin(builder);
                } else if (mScrollState == SCROLL_STATE_IDLE) {
                    // Stop jank monitoring on page scrolling.
                    mMonitor.end(CUJ_SETTINGS_PAGE_SCROLL);
                }
            }

+3 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ import com.android.settings.widget.LoadingViewController;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor;

import org.junit.Before;
import org.junit.Test;
@@ -75,7 +76,8 @@ import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;

@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class})
@Config(shadows = {ShadowUserManager.class, ShadowAppUtils.class,
        ShadowInteractionJankMonitor.class})
public class ManageApplicationsTest {

    @Mock