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