/* * 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.menu; import android.content.Context; /** * A base class of the item which will be displayed in the main menu. It contains the data such as * title to represent a row. This is an abstract class and the sub-class could have it's own data * for the row. */ public abstract class MenuRow { private final Context mContext; private final String mTitle; private final int mHeight; private final Menu mMenu; private MenuRowView mMenuRowView; private boolean mIsReselected = false; // TODO: Check if the heightResId is really necessary. public MenuRow(Context context, Menu menu, int titleResId, int heightResId) { this(context, menu, context.getString(titleResId), heightResId); } public MenuRow(Context context, Menu menu, String title, int heightResId) { mContext = context; mTitle = title; mMenu = menu; mHeight = context.getResources().getDimensionPixelSize(heightResId); } /** Returns the context. */ protected Context getContext() { return mContext; } /** Returns the menu object. */ public Menu getMenu() { return mMenu; } /** Returns the title of this row. */ public String getTitle() { return mTitle; } /** Returns the height of this row. */ public int getHeight() { return mHeight; } /** Sets the menu row view. */ public void setMenuRowView(MenuRowView menuRowView) { mMenuRowView = menuRowView; } /** Returns the menu row view. */ protected MenuRowView getMenuRowView() { return mMenuRowView; } /** Updates the contents in this row. This method is called only by the menu when necessary. */ public abstract void update(); /** Indicates whether this row is shown in the menu. */ public boolean isVisible() { return true; } /** * Releases all the resources which need to be released. This method is called when the main * menu is not available any more. */ public void release() {} /** Returns the ID of the layout resource for this row. */ public abstract int getLayoutResId(); /** Returns the ID of this row. This ID is used to select the row in the main menu. */ public abstract String getId(); /** This method is called when recent channels are changed. */ public void onRecentChannelsChanged() {} /** Returns whether to hide the title when the row is selected. */ public boolean hideTitleWhenSelected() { return false; } /** * Sets if menu row is reselected. * * @param isReselected {@code true} if row is reselected; * else {@code false}. */ public void setIsReselected(boolean isReselected) { mIsReselected = isReselected; } /** Returns true if row is reselected. */ public boolean isReselected() { return mIsReselected; } }