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

Commit 6e72c8bb authored by Hyunyoung Song's avatar Hyunyoung Song
Browse files

All apps memory leak fix / unregister data observer

Bug: 197702957

Test: adb shell dumpsys meminfo com.google.android.apps.nexuslauncher, ahat

Change-Id: Ia5732cced959e4a199d9c2b59f1f3941a2e23552
parent 6d7a0063
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -499,8 +499,10 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo

    private void replaceRVContainer(boolean showTabs) {
        for (int i = 0; i < mAH.length; i++) {
            if (mAH[i].recyclerView != null) {
                mAH[i].recyclerView.setLayoutManager(null);
            AllAppsRecyclerView rv = mAH[i].recyclerView;
            if (rv != null) {
                rv.setLayoutManager(null);
                rv.setAdapter(null);
            }
        }
        View oldView = getRecyclerViewContainer();
+13 −5
Original line number Diff line number Diff line
@@ -63,6 +63,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView {
    private final SparseIntArray mCachedScrollPositions = new SparseIntArray();
    private final AllAppsFastScrollHelper mFastScrollHelper;


    private final AdapterDataObserver mObserver = new RecyclerView.AdapterDataObserver() {
        public void onChanged() {
            mCachedScrollPositions.clear();
        }
    };

    // The empty-search result background
    private AllAppsBackgroundDrawable mEmptySearchBackground;
    private int mEmptySearchBackgroundTopOffset;
@@ -247,12 +254,13 @@ public class AllAppsRecyclerView extends BaseRecyclerView {

    @Override
    public void setAdapter(Adapter adapter) {
        if (getAdapter() != null) {
            getAdapter().unregisterAdapterDataObserver(mObserver);
        }
        super.setAdapter(adapter);
        adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
            public void onChanged() {
                mCachedScrollPositions.clear();
        if (adapter != null) {
            adapter.registerAdapterDataObserver(mObserver);
        }
        });
    }

    @Override