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

Commit f213afc0 authored by Anushree Ganjam's avatar Anushree Ganjam
Browse files

Add OnLayoutCompleted() Listener.

OnLayoutCompleted() Listener for RecyclerView.LayoutManager#onLayoutCompleted(RecyclerView.State) so we can do impression logging when RecyclerView has finished laying out the items.

Bug: 204781396
Test: Manual
Change-Id: I59b81e98415b2b0c6f3b26d2c41d348242342048
parent 1d253ac8
Loading
Loading
Loading
Loading
+34 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter;
import com.android.launcher3.util.ScrollableLayoutManager;
import com.android.launcher3.util.ScrollableLayoutManager;
import com.android.launcher3.views.ActivityContext;
import com.android.launcher3.views.ActivityContext;


import java.util.ArrayList;
import java.util.List;
import java.util.List;


/**
/**
@@ -43,6 +44,31 @@ public class AllAppsGridAdapter<T extends Context & ActivityContext> extends


    public static final String TAG = "AppsGridAdapter";
    public static final String TAG = "AppsGridAdapter";
    private final AppsGridLayoutManager mGridLayoutMgr;
    private final AppsGridLayoutManager mGridLayoutMgr;
    private final List<OnLayoutCompletedListener> mOnLayoutCompletedListeners = new ArrayList<>();

    /**
     * Listener for {@link RecyclerView.LayoutManager#onLayoutCompleted(RecyclerView.State)}
     */
    public interface OnLayoutCompletedListener {
        void onLayoutCompleted();
    }

    /**
     * Adds a {@link OnLayoutCompletedListener} to receive a callback when {@link
     * RecyclerView.LayoutManager#onLayoutCompleted(RecyclerView.State)} is called
     */
    public void addOnLayoutCompletedListener(OnLayoutCompletedListener listener) {
        mOnLayoutCompletedListeners.add(listener);
    }

    /**
     * Removes a {@link OnLayoutCompletedListener} to not receive a callback when {@link
     * RecyclerView.LayoutManager#onLayoutCompleted(RecyclerView.State)} is called
     */
    public void removeOnLayoutCompletedListener(OnLayoutCompletedListener listener) {
        mOnLayoutCompletedListeners.remove(listener);
    }



    public AllAppsGridAdapter(T activityContext, LayoutInflater inflater,
    public AllAppsGridAdapter(T activityContext, LayoutInflater inflater,
            AlphabeticalAppsList apps, BaseAdapterProvider[] adapterProviders) {
            AlphabeticalAppsList apps, BaseAdapterProvider[] adapterProviders) {
@@ -132,6 +158,14 @@ public class AllAppsGridAdapter<T extends Context & ActivityContext> extends
            return extraRows;
            return extraRows;
        }
        }


        @Override
        public void onLayoutCompleted(RecyclerView.State state) {
            super.onLayoutCompleted(state);
            for (OnLayoutCompletedListener listener : mOnLayoutCompletedListeners) {
                listener.onLayoutCompleted();
            }
        }

        @Override
        @Override
        protected int incrementTotalHeight(Adapter adapter, int position, int heightUntilLastPos) {
        protected int incrementTotalHeight(Adapter adapter, int position, int heightUntilLastPos) {
            AllAppsGridAdapter.AdapterItem item = mApps.getAdapterItems().get(position);
            AllAppsGridAdapter.AdapterItem item = mApps.getAdapterItems().get(position);