/* * 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; import android.support.annotation.Nullable; import android.text.TextUtils; import com.android.tv.MainActivity; import com.android.tv.R; import com.android.tv.customization.CustomAction; import com.android.tv.customization.TvCustomizationManager; import java.util.List; /** * A factory class to create menu rows. */ public class MenuRowFactory { private final MainActivity mMainActivity; private final TvCustomizationManager mTvCustomizationManager; /** * A constructor. */ public MenuRowFactory(MainActivity mainActivity) { mMainActivity = mainActivity; mTvCustomizationManager = new TvCustomizationManager(mainActivity); mTvCustomizationManager.initialize(); } /** * Creates an object corresponding to the given {@code key}. */ @Nullable public MenuRow createMenuRow(Menu menu, Class key) { if (PlayControlsRow.class.equals(key)) { return new PlayControlsRow(mMainActivity, menu, mMainActivity.getTimeShiftManager()); } else if (ChannelsRow.class.equals(key)) { return new ChannelsRow(mMainActivity, menu, mMainActivity.getProgramDataManager()); } else if (PartnerRow.class.equals(key)) { List customActions = mTvCustomizationManager.getCustomActions( TvCustomizationManager.ID_PARTNER_ROW); String title = mTvCustomizationManager.getPartnerRowTitle(); if (customActions != null && !TextUtils.isEmpty(title)) { return new PartnerRow(mMainActivity, menu, title, customActions); } return null; } else if (TvOptionsRow.class.equals(key)) { return new TvOptionsRow(mMainActivity, menu, mTvCustomizationManager .getCustomActions(TvCustomizationManager.ID_OPTIONS_ROW)); } else if (PipOptionsRow.class.equals(key)) { return new PipOptionsRow(mMainActivity, menu); } return null; } /** * A menu row which represents the TV options row. */ public static class TvOptionsRow extends ItemListRow { private TvOptionsRow(Context context, Menu menu, List customActions) { super(context, menu, R.string.menu_title_options, R.dimen.action_card_height, new TvOptionsRowAdapter(context, customActions)); } @Override public void onStreamInfoChanged() { if (getMenu().isActive()) { update(); } } } /** * A menu row which represents the PIP options row. */ public static class PipOptionsRow extends ItemListRow { private final MainActivity mMainActivity; private PipOptionsRow(Context context, Menu menu) { super(context, menu, R.string.menu_title_pip_options, R.dimen.action_card_height, new PipOptionsRowAdapter(context)); mMainActivity = (MainActivity) context; } @Override public boolean isVisible() { // TODO: Remove the dependency on MainActivity. return super.isVisible() && mMainActivity.isPipEnabled(); } } /** * A menu row which represents the partner row. */ public static class PartnerRow extends ItemListRow { private PartnerRow(Context context, Menu menu, String title, List customActions) { super(context, menu, title, R.dimen.action_card_height, new PartnerOptionsRowAdapter(context, customActions)); } } }