Home | History | Annotate | Download | only in app
      1 // CHECKSTYLE:OFF Generated code
      2 /* This file is auto-generated from VerticalGridSupportFragment.java.  DO NOT MODIFY. */
      3 
      4 /*
      5  * Copyright (C) 2014 The Android Open Source Project
      6  *
      7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
      8  * in compliance with the License. You may obtain a copy of the License at
      9  *
     10  * http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software distributed under the License
     13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
     14  * or implied. See the License for the specific language governing permissions and limitations under
     15  * the License.
     16  */
     17 package androidx.leanback.app;
     18 
     19 import android.os.Bundle;
     20 import android.util.Log;
     21 import android.view.LayoutInflater;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 
     25 import androidx.leanback.R;
     26 import androidx.leanback.transition.TransitionHelper;
     27 import androidx.leanback.util.StateMachine.State;
     28 import androidx.leanback.widget.BrowseFrameLayout;
     29 import androidx.leanback.widget.ObjectAdapter;
     30 import androidx.leanback.widget.OnChildLaidOutListener;
     31 import androidx.leanback.widget.OnItemViewClickedListener;
     32 import androidx.leanback.widget.OnItemViewSelectedListener;
     33 import androidx.leanback.widget.Presenter;
     34 import androidx.leanback.widget.Row;
     35 import androidx.leanback.widget.RowPresenter;
     36 import androidx.leanback.widget.VerticalGridPresenter;
     37 
     38 /**
     39  * A fragment for creating leanback vertical grids.
     40  *
     41  * <p>Renders a vertical grid of objects given a {@link VerticalGridPresenter} and
     42  * an {@link ObjectAdapter}.
     43  * @deprecated use {@link VerticalGridSupportFragment}
     44  */
     45 @Deprecated
     46 public class VerticalGridFragment extends BaseFragment {
     47     static final String TAG = "VerticalGF";
     48     static final boolean DEBUG = false;
     49 
     50     private ObjectAdapter mAdapter;
     51     private VerticalGridPresenter mGridPresenter;
     52     VerticalGridPresenter.ViewHolder mGridViewHolder;
     53     OnItemViewSelectedListener mOnItemViewSelectedListener;
     54     private OnItemViewClickedListener mOnItemViewClickedListener;
     55     private Object mSceneAfterEntranceTransition;
     56     private int mSelectedPosition = -1;
     57 
     58     /**
     59      * State to setEntranceTransitionState(false)
     60      */
     61     final State STATE_SET_ENTRANCE_START_STATE = new State("SET_ENTRANCE_START_STATE") {
     62         @Override
     63         public void run() {
     64             setEntranceTransitionState(false);
     65         }
     66     };
     67 
     68     @Override
     69     void createStateMachineStates() {
     70         super.createStateMachineStates();
     71         mStateMachine.addState(STATE_SET_ENTRANCE_START_STATE);
     72     }
     73 
     74     @Override
     75     void createStateMachineTransitions() {
     76         super.createStateMachineTransitions();
     77         mStateMachine.addTransition(STATE_ENTRANCE_ON_PREPARED,
     78                 STATE_SET_ENTRANCE_START_STATE, EVT_ON_CREATEVIEW);
     79     }
     80 
     81     /**
     82      * Sets the grid presenter.
     83      */
     84     public void setGridPresenter(VerticalGridPresenter gridPresenter) {
     85         if (gridPresenter == null) {
     86             throw new IllegalArgumentException("Grid presenter may not be null");
     87         }
     88         mGridPresenter = gridPresenter;
     89         mGridPresenter.setOnItemViewSelectedListener(mViewSelectedListener);
     90         if (mOnItemViewClickedListener != null) {
     91             mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener);
     92         }
     93     }
     94 
     95     /**
     96      * Returns the grid presenter.
     97      */
     98     public VerticalGridPresenter getGridPresenter() {
     99         return mGridPresenter;
    100     }
    101 
    102     /**
    103      * Sets the object adapter for the fragment.
    104      */
    105     public void setAdapter(ObjectAdapter adapter) {
    106         mAdapter = adapter;
    107         updateAdapter();
    108     }
    109 
    110     /**
    111      * Returns the object adapter.
    112      */
    113     public ObjectAdapter getAdapter() {
    114         return mAdapter;
    115     }
    116 
    117     final private OnItemViewSelectedListener mViewSelectedListener =
    118             new OnItemViewSelectedListener() {
    119         @Override
    120         public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
    121                 RowPresenter.ViewHolder rowViewHolder, Row row) {
    122             int position = mGridViewHolder.getGridView().getSelectedPosition();
    123             if (DEBUG) Log.v(TAG, "grid selected position " + position);
    124             gridOnItemSelected(position);
    125             if (mOnItemViewSelectedListener != null) {
    126                 mOnItemViewSelectedListener.onItemSelected(itemViewHolder, item,
    127                         rowViewHolder, row);
    128             }
    129         }
    130     };
    131 
    132     final private OnChildLaidOutListener mChildLaidOutListener =
    133             new OnChildLaidOutListener() {
    134         @Override
    135         public void onChildLaidOut(ViewGroup parent, View view, int position, long id) {
    136             if (position == 0) {
    137                 showOrHideTitle();
    138             }
    139         }
    140     };
    141 
    142     /**
    143      * Sets an item selection listener.
    144      */
    145     public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {
    146         mOnItemViewSelectedListener = listener;
    147     }
    148 
    149     void gridOnItemSelected(int position) {
    150         if (position != mSelectedPosition) {
    151             mSelectedPosition = position;
    152             showOrHideTitle();
    153         }
    154     }
    155 
    156     void showOrHideTitle() {
    157         if (mGridViewHolder.getGridView().findViewHolderForAdapterPosition(mSelectedPosition)
    158                 == null) {
    159             return;
    160         }
    161         if (!mGridViewHolder.getGridView().hasPreviousViewInSameRow(mSelectedPosition)) {
    162             showTitle(true);
    163         } else {
    164             showTitle(false);
    165         }
    166     }
    167 
    168     /**
    169      * Sets an item clicked listener.
    170      */
    171     public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {
    172         mOnItemViewClickedListener = listener;
    173         if (mGridPresenter != null) {
    174             mGridPresenter.setOnItemViewClickedListener(mOnItemViewClickedListener);
    175         }
    176     }
    177 
    178     /**
    179      * Returns the item clicked listener.
    180      */
    181     public OnItemViewClickedListener getOnItemViewClickedListener() {
    182         return mOnItemViewClickedListener;
    183     }
    184 
    185     @Override
    186     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    187             Bundle savedInstanceState) {
    188         ViewGroup root = (ViewGroup) inflater.inflate(R.layout.lb_vertical_grid_fragment,
    189                 container, false);
    190         ViewGroup gridFrame = (ViewGroup) root.findViewById(R.id.grid_frame);
    191         installTitleView(inflater, gridFrame, savedInstanceState);
    192         getProgressBarManager().setRootView(root);
    193 
    194         ViewGroup gridDock = (ViewGroup) root.findViewById(R.id.browse_grid_dock);
    195         mGridViewHolder = mGridPresenter.onCreateViewHolder(gridDock);
    196         gridDock.addView(mGridViewHolder.view);
    197         mGridViewHolder.getGridView().setOnChildLaidOutListener(mChildLaidOutListener);
    198 
    199         mSceneAfterEntranceTransition = TransitionHelper.createScene(gridDock, new Runnable() {
    200             @Override
    201             public void run() {
    202                 setEntranceTransitionState(true);
    203             }
    204         });
    205 
    206         updateAdapter();
    207         return root;
    208     }
    209 
    210     private void setupFocusSearchListener() {
    211         BrowseFrameLayout browseFrameLayout = (BrowseFrameLayout) getView().findViewById(
    212                 R.id.grid_frame);
    213         browseFrameLayout.setOnFocusSearchListener(getTitleHelper().getOnFocusSearchListener());
    214     }
    215 
    216     @Override
    217     public void onStart() {
    218         super.onStart();
    219         setupFocusSearchListener();
    220     }
    221 
    222     @Override
    223     public void onDestroyView() {
    224         super.onDestroyView();
    225         mGridViewHolder = null;
    226     }
    227 
    228     /**
    229      * Sets the selected item position.
    230      */
    231     public void setSelectedPosition(int position) {
    232         mSelectedPosition = position;
    233         if(mGridViewHolder != null && mGridViewHolder.getGridView().getAdapter() != null) {
    234             mGridViewHolder.getGridView().setSelectedPositionSmooth(position);
    235         }
    236     }
    237 
    238     private void updateAdapter() {
    239         if (mGridViewHolder != null) {
    240             mGridPresenter.onBindViewHolder(mGridViewHolder, mAdapter);
    241             if (mSelectedPosition != -1) {
    242                 mGridViewHolder.getGridView().setSelectedPosition(mSelectedPosition);
    243             }
    244         }
    245     }
    246 
    247     @Override
    248     protected Object createEntranceTransition() {
    249         return TransitionHelper.loadTransition(FragmentUtil.getContext(VerticalGridFragment.this),
    250                 R.transition.lb_vertical_grid_entrance_transition);
    251     }
    252 
    253     @Override
    254     protected void runEntranceTransition(Object entranceTransition) {
    255         TransitionHelper.runTransition(mSceneAfterEntranceTransition, entranceTransition);
    256     }
    257 
    258     void setEntranceTransitionState(boolean afterTransition) {
    259         mGridPresenter.setEntranceTransitionState(mGridViewHolder, afterTransition);
    260     }
    261 }
    262