| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.tv.guide; |
| |
| import android.content.Context; |
| import android.support.v7.widget.RecyclerView; |
| import android.util.Log; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.TextView; |
| |
| import com.android.tv.R; |
| import com.android.tv.data.GenreItems; |
| |
| import java.util.List; |
| |
| /** |
| * Adapts the genre items obtained from {@link GenreItems} to the program guide side panel. |
| */ |
| public class GenreListAdapter extends RecyclerView.Adapter<GenreListAdapter.GenreRowHolder> { |
| private static final String TAG = "GenreListAdapter"; |
| private static final boolean DEBUG = false; |
| |
| private final Context mContext; |
| private final ProgramManager mProgramManager; |
| private final ProgramGuide mProgramGuide; |
| private String[] mGenreLabels; |
| |
| public GenreListAdapter(Context context, ProgramManager programManager, ProgramGuide guide) { |
| mContext = context; |
| mProgramManager = programManager; |
| mProgramManager.addListener(new ProgramManager.ListenerAdapter() { |
| @Override |
| public void onGenresUpdated() { |
| mGenreLabels = GenreItems.getLabels(mContext); |
| notifyDataSetChanged(); |
| } |
| }); |
| mProgramGuide = guide; |
| } |
| |
| @Override |
| public int getItemCount() { |
| List<Integer> filteredGenreIds = mProgramManager.getFilteredGenreIds(); |
| if (filteredGenreIds == null) { |
| // Genre item would be available after program manager builds genre filter. |
| return 0; |
| } |
| return filteredGenreIds.size(); |
| } |
| |
| @Override |
| public int getItemViewType(int position) { |
| return R.layout.program_guide_side_panel_row; |
| } |
| |
| @Override |
| public void onBindViewHolder(GenreRowHolder holder, int position) { |
| List<Integer> filteredGenreIds = mProgramManager.getFilteredGenreIds(); |
| int genreId = filteredGenreIds.get(position); |
| holder.onBind(genreId, mGenreLabels[genreId]); |
| } |
| |
| @Override |
| public GenreRowHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
| View itemView = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false); |
| return new GenreRowHolder(itemView, mProgramGuide); |
| } |
| |
| public static class GenreRowHolder extends RecyclerView.ViewHolder implements |
| View.OnFocusChangeListener { |
| private final ProgramGuide mProgramGuide; |
| private int mGenreId; |
| |
| // Should be called from main thread. |
| public GenreRowHolder(View itemView, ProgramGuide programGuide) { |
| super(itemView); |
| mProgramGuide = programGuide; |
| } |
| |
| public void onBind(int genreId, String genreLabel) { |
| mGenreId = genreId; |
| |
| TextView textView = (TextView) itemView; |
| textView.setText(genreLabel); |
| |
| itemView.setOnFocusChangeListener(this); |
| } |
| |
| @Override |
| public void onFocusChange(View view, boolean hasFocus) { |
| if (hasFocus) { |
| if (DEBUG) { |
| Log.d(TAG, "onFocusChanged " + ((TextView) view).getText() |
| + "(" + mGenreId + ") hasFocus"); |
| } |
| mProgramGuide.requestGenreChange(mGenreId); |
| } |
| } |
| } |
| } |