blob: 0945a0c5317588629bde83e0f9ae90922658c8ca [file] [log] [blame]
/*
* 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;
}
}