BaseRowSupportFragment.java revision fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3
16193c12a1897723c87b41f4e304a8cd04deef2dcDake Gu/* This file is auto-generated from BaseRowFragment.java.  DO NOT MODIFY. */
26193c12a1897723c87b41f4e304a8cd04deef2dcDake Gu
361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu/*
461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * Copyright (C) 2014 The Android Open Source Project
561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu *
661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * in compliance with the License. You may obtain a copy of the License at
861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu *
961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * http://www.apache.org/licenses/LICENSE-2.0
1061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu *
1161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License
1261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * or implied. See the License for the specific language governing permissions and limitations under
1461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * the License.
1561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu */
1661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gupackage android.support.v17.leanback.app;
1761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
1861905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.support.v4.app.Fragment;
1961905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.os.Bundle;
2061905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.support.v17.leanback.widget.ItemBridgeAdapter;
2161905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.support.v17.leanback.widget.ListRow;
222f5ebf3f6f7bb6a24856f389e369b247118ba119susnataimport android.support.v17.leanback.widget.ObjectAdapter;
230246318f27a905a31df5a8af445cfe67d31dfb68Dake Guimport android.support.v17.leanback.widget.OnChildViewHolderSelectedListener;
242f5ebf3f6f7bb6a24856f389e369b247118ba119susnataimport android.support.v17.leanback.widget.PresenterSelector;
252f5ebf3f6f7bb6a24856f389e369b247118ba119susnataimport android.support.v17.leanback.widget.Row;
262f5ebf3f6f7bb6a24856f389e369b247118ba119susnataimport android.support.v17.leanback.widget.VerticalGridView;
270246318f27a905a31df5a8af445cfe67d31dfb68Dake Guimport android.support.v7.widget.RecyclerView;
2861905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.view.LayoutInflater;
2961905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.view.View;
3061905b0b52c50018dcaebcd79699c39b8f28d622Dake Guimport android.view.ViewGroup;
3161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
3261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu/**
3361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu * An internal base class for a fragment containing a list of rows.
3461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu */
3561905b0b52c50018dcaebcd79699c39b8f28d622Dake Guabstract class BaseRowSupportFragment extends Fragment {
36fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak    private static final String CURRENT_SELECTED_POSITION = "currentSelectedPosition";
3761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    private ObjectAdapter mAdapter;
3861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    private VerticalGridView mVerticalGridView;
3961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    private PresenterSelector mPresenterSelector;
4061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    private ItemBridgeAdapter mBridgeAdapter;
4161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    private int mSelectedPosition = -1;
42902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu    private boolean mPendingTransitionPrepare;
4361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
4442752c860a26deacca04ea9ebeb00ddb4d8ce2fcDake Gu    abstract int getLayoutResourceId();
4561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
460246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    private final OnChildViewHolderSelectedListener mRowSelectedListener =
470246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu            new OnChildViewHolderSelectedListener() {
480246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu                @Override
490246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu                public void onChildViewHolderSelected(RecyclerView parent,
500246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu                        RecyclerView.ViewHolder view, int position, int subposition) {
510246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu                    onRowSelected(parent, view, position, subposition);
520246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu                }
530246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu            };
5461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
550246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu    void onRowSelected(RecyclerView parent, RecyclerView.ViewHolder view,
560246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu            int position, int subposition) {
5761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
5861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
5961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    @Override
6061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public View onCreateView(LayoutInflater inflater, ViewGroup container,
6161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            Bundle savedInstanceState) {
6261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        View view = inflater.inflate(getLayoutResourceId(), container, false);
6361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        mVerticalGridView = findGridViewFromRoot(view);
64902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu        if (mPendingTransitionPrepare) {
65902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu            mPendingTransitionPrepare = false;
66902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu            onTransitionPrepare();
67902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu        }
6861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return view;
6961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
7061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
7142752c860a26deacca04ea9ebeb00ddb4d8ce2fcDake Gu    VerticalGridView findGridViewFromRoot(View view) {
7261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return (VerticalGridView) view;
7361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
7461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
7561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    @Override
7661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public void onViewCreated(View view, Bundle savedInstanceState) {
77fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak        if (savedInstanceState != null) {
78fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak            mSelectedPosition = savedInstanceState.getInt(CURRENT_SELECTED_POSITION, -1);
79fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak        }
8061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (mBridgeAdapter != null) {
8161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setAdapter(mBridgeAdapter);
8261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            if (mSelectedPosition != -1) {
8361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu                mVerticalGridView.setSelectedPosition(mSelectedPosition);
8461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            }
8561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
860246318f27a905a31df5a8af445cfe67d31dfb68Dake Gu        mVerticalGridView.setOnChildViewHolderSelectedListener(mRowSelectedListener);
8761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
8861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
8961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    @Override
9061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public void onDestroyView() {
9161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        super.onDestroyView();
9261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        mVerticalGridView = null;
9361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
9461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
95fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak    @Override
96fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak    public void onSaveInstanceState(Bundle outState) {
97fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak        super.onSaveInstanceState(outState);
98fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak        outState.putInt(CURRENT_SELECTED_POSITION, mSelectedPosition);
99fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak    }
100fb11ded6cfa3965883e68625e0c7e14b4b4fe0b3Susnata Basak
10161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
10261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     * Set the presenter selector used to create and bind views.
10361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
10461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public final void setPresenterSelector(PresenterSelector presenterSelector) {
10561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        mPresenterSelector = presenterSelector;
10661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        updateAdapter();
10761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
10861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
10961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
11061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     * Get the presenter selector used to create and bind views.
11161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
11261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public final PresenterSelector getPresenterSelector() {
11361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return mPresenterSelector;
11461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
11561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
11661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
11761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     * Sets the adapter for the fragment.
11861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
11961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public final void setAdapter(ObjectAdapter rowsAdapter) {
12061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        mAdapter = rowsAdapter;
12161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        updateAdapter();
12261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
12361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
12461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
12561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     * Returns the list of rows.
12661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
12761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public final ObjectAdapter getAdapter() {
12861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return mAdapter;
12961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
13061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
13161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
13261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     * Returns the bridge adapter.
13361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
13442752c860a26deacca04ea9ebeb00ddb4d8ce2fcDake Gu    final ItemBridgeAdapter getBridgeAdapter() {
13561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return mBridgeAdapter;
13661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
13761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
13861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    /**
1393f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu     * Sets the selected row position with smooth animation.
14061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu     */
14161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    public void setSelectedPosition(int position) {
1423f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu        setSelectedPosition(position, true);
1433f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu    }
1443f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu
1453f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu    /**
1460d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu     * Gets position of currently selected row.
1470d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu     * @return Position of currently selected row.
1480d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu     */
1492f1bd591e01fe93f605844d4a10cde7116315b7cDake Gu    public int getSelectedPosition() {
1500d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu        return mSelectedPosition;
1510d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu    }
1520d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu
1530d73d42df7cf4b325b8f49660e3326204915ce8fDake Gu    /**
1543f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu     * Sets the selected row position.
1553f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu     */
1563f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu    public void setSelectedPosition(int position, boolean smooth) {
15761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        mSelectedPosition = position;
15861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if(mVerticalGridView != null && mVerticalGridView.getAdapter() != null) {
1593f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu            if (smooth) {
1603f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu                mVerticalGridView.setSelectedPositionSmooth(position);
1613f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu            } else {
1623f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu                mVerticalGridView.setSelectedPosition(position);
1633f0f3eb255bde49549a77c0b5d252decaa2a0202Dake Gu            }
16461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
16561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
16661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
16761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    final VerticalGridView getVerticalGridView() {
16861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        return mVerticalGridView;
16961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
17061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
17142752c860a26deacca04ea9ebeb00ddb4d8ce2fcDake Gu    void updateAdapter() {
172e71207666a1a915e5a5bdf7503bd936f4d87b48bDake Gu        if (mBridgeAdapter != null) {
173e71207666a1a915e5a5bdf7503bd936f4d87b48bDake Gu            // detach observer from ObjectAdapter
174e71207666a1a915e5a5bdf7503bd936f4d87b48bDake Gu            mBridgeAdapter.clear();
175e71207666a1a915e5a5bdf7503bd936f4d87b48bDake Gu            mBridgeAdapter = null;
176e71207666a1a915e5a5bdf7503bd936f4d87b48bDake Gu        }
17761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
17861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (mAdapter != null) {
17961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            // If presenter selector is null, adapter ps will be used
18061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mBridgeAdapter = new ItemBridgeAdapter(mAdapter, mPresenterSelector);
18161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
18261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (mVerticalGridView != null) {
18361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setAdapter(mBridgeAdapter);
18461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            if (mBridgeAdapter != null && mSelectedPosition != -1) {
18561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu                mVerticalGridView.setSelectedPosition(mSelectedPosition);
18661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            }
18761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
18861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
18961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
19042752c860a26deacca04ea9ebeb00ddb4d8ce2fcDake Gu    Object getItem(Row row, int position) {
19161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (row instanceof ListRow) {
19261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            return ((ListRow) row).getAdapter().get(position);
19361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        } else {
19461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            return null;
19561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
19661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
19761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
1982f5ebf3f6f7bb6a24856f389e369b247118ba119susnata    public boolean onTransitionPrepare() {
19961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (mVerticalGridView != null) {
20061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setAnimateChildLayout(false);
201902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu            mVerticalGridView.setScrollEnabled(false);
202902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu            return true;
20361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
204902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu        mPendingTransitionPrepare = true;
205902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu        return false;
206902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu    }
207902e68c114f86e8002516ff3f0248b722b6c5711Dake Gu
2082f5ebf3f6f7bb6a24856f389e369b247118ba119susnata    public void onTransitionStart() {
2094a4e0872bdf0548188e81740eb62085215e7f976Dake Gu        if (mVerticalGridView != null) {
2104a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setPruneChild(false);
2114a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setLayoutFrozen(true);
2124a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setFocusSearchDisabled(true);
2134a4e0872bdf0548188e81740eb62085215e7f976Dake Gu        }
21461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
21561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
2162f5ebf3f6f7bb6a24856f389e369b247118ba119susnata    public void onTransitionEnd() {
2174a4e0872bdf0548188e81740eb62085215e7f976Dake Gu        // be careful that fragment might be destroyed before header transition ends.
2184a4e0872bdf0548188e81740eb62085215e7f976Dake Gu        if (mVerticalGridView != null) {
2194a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setLayoutFrozen(false);
2204a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setAnimateChildLayout(true);
2214a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setPruneChild(true);
2224a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setFocusSearchDisabled(false);
2234a4e0872bdf0548188e81740eb62085215e7f976Dake Gu            mVerticalGridView.setScrollEnabled(true);
2244a4e0872bdf0548188e81740eb62085215e7f976Dake Gu        }
22561905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
22661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
2272f5ebf3f6f7bb6a24856f389e369b247118ba119susnata    public void setAlignment(int windowAlignOffsetTop) {
22861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        if (mVerticalGridView != null) {
22961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            // align the top edge of item
23061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setItemAlignmentOffset(0);
23161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setItemAlignmentOffsetPercent(
23261905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu                    VerticalGridView.ITEM_ALIGN_OFFSET_PERCENT_DISABLED);
23361905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu
23461905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            // align to a fixed position from top
2352f5ebf3f6f7bb6a24856f389e369b247118ba119susnata            mVerticalGridView.setWindowAlignmentOffset(windowAlignOffsetTop);
23661905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setWindowAlignmentOffsetPercent(
23761905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu                    VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
23861905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu            mVerticalGridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE);
23961905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu        }
24061905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu    }
24161905b0b52c50018dcaebcd79699c39b8f28d622Dake Gu}
242