BaseRowSupportFragment.java revision 7121d4307443933ec8b680e4fc0b9bf6ddea66ab
1/* This file is auto-generated from BaseRowFragment.java.  DO NOT MODIFY. */
2
3/*
4 * Copyright (C) 2014 The Android Open Source Project
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
7 * in compliance with the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software distributed under the License
12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing permissions and limitations under
14 * the License.
15 */
16package android.support.v17.leanback.app;
17
18import android.support.v4.app.Fragment;
19import android.os.Bundle;
20import android.support.v17.leanback.widget.ObjectAdapter;
21import android.support.v17.leanback.widget.PresenterSelector;
22import android.support.v17.leanback.widget.ItemBridgeAdapter;
23import android.support.v17.leanback.widget.VerticalGridView;
24import android.support.v17.leanback.widget.Row;
25import android.support.v17.leanback.widget.ListRow;
26import android.support.v17.leanback.widget.OnChildSelectedListener;
27import android.view.LayoutInflater;
28import android.view.View;
29import android.view.ViewGroup;
30
31/**
32 * An internal base class for a fragment containing a list of rows.
33 */
34abstract class BaseRowSupportFragment extends Fragment {
35    private ObjectAdapter mAdapter;
36    private VerticalGridView mVerticalGridView;
37    private PresenterSelector mPresenterSelector;
38    private ItemBridgeAdapter mBridgeAdapter;
39    private int mSelectedPosition = -1;
40    protected int mReparentHeaderId;
41    protected boolean mInTransition;
42
43    abstract protected int getLayoutResourceId();
44
45    private final OnChildSelectedListener mRowSelectedListener = new OnChildSelectedListener() {
46        @Override
47        public void onChildSelected(ViewGroup parent, View view, int position, long id) {
48            onRowSelected(parent, view, position, id);
49        }
50    };
51
52    protected void onRowSelected(ViewGroup parent, View view, int position, long id) {
53    }
54
55    @Override
56    public View onCreateView(LayoutInflater inflater, ViewGroup container,
57            Bundle savedInstanceState) {
58        View view = inflater.inflate(getLayoutResourceId(), container, false);
59        mVerticalGridView = findGridViewFromRoot(view);
60        return view;
61    }
62
63    protected VerticalGridView findGridViewFromRoot(View view) {
64        return (VerticalGridView) view;
65    }
66
67    @Override
68    public void onViewCreated(View view, Bundle savedInstanceState) {
69        if (mBridgeAdapter != null) {
70            mVerticalGridView.setAdapter(mBridgeAdapter);
71            if (mSelectedPosition != -1) {
72                mVerticalGridView.setSelectedPosition(mSelectedPosition);
73            }
74        }
75        mVerticalGridView.setOnChildSelectedListener(mRowSelectedListener);
76    }
77
78    @Override
79    public void onDestroyView() {
80        super.onDestroyView();
81        mVerticalGridView = null;
82    }
83
84    /**
85     * Set the presenter selector used to create and bind views.
86     */
87    public final void setPresenterSelector(PresenterSelector presenterSelector) {
88        mPresenterSelector = presenterSelector;
89        updateAdapter();
90    }
91
92    /**
93     * Get the presenter selector used to create and bind views.
94     */
95    public final PresenterSelector getPresenterSelector() {
96        return mPresenterSelector;
97    }
98
99    /**
100     * Sets the adapter for the fragment.
101     */
102    public final void setAdapter(ObjectAdapter rowsAdapter) {
103        mAdapter = rowsAdapter;
104        updateAdapter();
105    }
106
107    /**
108     * Returns the list of rows.
109     */
110    public final ObjectAdapter getAdapter() {
111        return mAdapter;
112    }
113
114    /**
115     * Returns the bridge adapter.
116     */
117    protected final ItemBridgeAdapter getBridgeAdapter() {
118        return mBridgeAdapter;
119    }
120
121    /**
122     * Set the selected item position.
123     */
124    public void setSelectedPosition(int position) {
125        mSelectedPosition = position;
126        if(mVerticalGridView != null && mVerticalGridView.getAdapter() != null) {
127            mVerticalGridView.setSelectedPositionSmooth(position);
128        }
129    }
130
131    final VerticalGridView getVerticalGridView() {
132        return mVerticalGridView;
133    }
134
135    protected void updateAdapter() {
136        mBridgeAdapter = null;
137
138        if (mAdapter != null) {
139            // If presenter selector is null, adapter ps will be used
140            mBridgeAdapter = new ItemBridgeAdapter(mAdapter, mPresenterSelector);
141        }
142        if (mVerticalGridView != null) {
143            mVerticalGridView.setAdapter(mBridgeAdapter);
144            if (mBridgeAdapter != null && mSelectedPosition != -1) {
145                mVerticalGridView.setSelectedPosition(mSelectedPosition);
146            }
147        }
148    }
149
150    protected Object getItem(Row row, int position) {
151        if (row instanceof ListRow) {
152            return ((ListRow) row).getAdapter().get(position);
153        } else {
154            return null;
155        }
156    }
157
158    void setReparentHeaderId(int reparentId) {
159        mReparentHeaderId = reparentId;
160    }
161
162    void onTransitionStart() {
163        mInTransition = true;
164        if (mVerticalGridView != null) {
165            mVerticalGridView.setAnimateChildLayout(false);
166            mVerticalGridView.setPruneChild(false);
167            mVerticalGridView.setFocusSearchDisabled(true);
168        }
169    }
170
171    void onTransitionEnd() {
172        if (mVerticalGridView != null) {
173            mVerticalGridView.setAnimateChildLayout(true);
174            mVerticalGridView.setPruneChild(true);
175            mVerticalGridView.setFocusSearchDisabled(false);
176        }
177        mInTransition = false;
178    }
179
180    void setItemAlignment() {
181        if (mVerticalGridView != null) {
182            // align the top edge of item
183            mVerticalGridView.setItemAlignmentOffset(0);
184            mVerticalGridView.setItemAlignmentOffsetPercent(
185                    VerticalGridView.ITEM_ALIGN_OFFSET_PERCENT_DISABLED);
186        }
187    }
188
189    void setWindowAlignmentFromTop(int alignedTop) {
190        if (mVerticalGridView != null) {
191            // align to a fixed position from top
192            mVerticalGridView.setWindowAlignmentOffset(alignedTop);
193            mVerticalGridView.setWindowAlignmentOffsetPercent(
194                    VerticalGridView.WINDOW_ALIGN_OFFSET_PERCENT_DISABLED);
195            mVerticalGridView.setWindowAlignment(VerticalGridView.WINDOW_ALIGN_NO_EDGE);
196        }
197    }
198}
199