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

Commit 35931974 authored by menghanli's avatar menghanli
Browse files

Create palette preview for color correction (2/n).

Limit the preview measure for one time to avoid unnecessary
measure and draw performance.

Bug: 145968068
Test: make RunSettingsRoboTests ROBOTEST_FILTER=PaletteListViewTest
Test: make RunSettingsRoboTests2
Change-Id: Ib8ea13e511351c71babcbd1376817cea3a47cac4
parent d2fe0412
Loading
Loading
Loading
Loading
+37 −18
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ import com.android.settingslib.widget.R;
/** Preference that easier preview by matching name to color. */
public class PaletteListPreference extends Preference {

    private ListView mListView;
    private ViewTreeObserver.OnPreDrawListener mPreDrawListener;

    /**
     * Constructs a new PaletteListPreference with the given context's theme and the supplied
     * attribute set.
@@ -58,6 +61,7 @@ public class PaletteListPreference extends Preference {
    public PaletteListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setLayoutResource(R.layout.daltonizer_preview);
        initPreDrawListener();
    }

    @Override
@@ -65,24 +69,39 @@ public class PaletteListPreference extends Preference {
        super.onBindViewHolder(holder);

        final View rootView = holder.itemView;
        final ListView listView = rootView.findViewById(R.id.palette_listView);
        listView.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
        mListView = rootView.findViewById(R.id.palette_listView);
        if (mPreDrawListener != null) {
            mListView.getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
        }
    }

    private void initPreDrawListener() {
        mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
            @Override
                    public void onGlobalLayout() {
                        final int listViewHeight = listView.getMeasuredHeight();
                        final int listViewWidth = listView.getMeasuredWidth();
            public boolean onPreDraw() {
                if (mListView == null) {
                    return false;
                }

                final int listViewHeight = mListView.getMeasuredHeight();
                final int listViewWidth = mListView.getMeasuredWidth();

                // Removes the callback after get result of measure view.
                        listView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                final ViewTreeObserver viewTreeObserver = mListView.getViewTreeObserver();
                if (viewTreeObserver.isAlive()) {
                    viewTreeObserver.removeOnPreDrawListener(this);
                }
                mPreDrawListener = null;

                // Resets layout parameters to display whole items from listView.
                final FrameLayout.LayoutParams layoutParams =
                                (FrameLayout.LayoutParams) listView.getLayoutParams();
                        layoutParams.height = listViewHeight * listView.getAdapter().getCount();
                        (FrameLayout.LayoutParams) mListView.getLayoutParams();
                layoutParams.height = listViewHeight * mListView.getAdapter().getCount();
                layoutParams.width = listViewWidth;
                        listView.setLayoutParams(layoutParams);
                        listView.invalidateViews();
                mListView.setLayoutParams(layoutParams);

                return true;
            }
                });
        };
    }
}