1816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 4816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 5816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * you may not use this file except in compliance with the License. 6816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * You may obtain a copy of the License at 7816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 8816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 9816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * 10816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Unless required by applicable law or agreed to in writing, software 11816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 12816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * See the License for the specific language governing permissions and 14816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * limitations under the License. 15816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko */ 16816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 17816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopackage com.android.tv.menu; 18816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 19816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.Context; 20944779887775bd950cf1abf348d2df461593f6abLive Channels Teamimport com.android.tv.common.customization.CustomAction; 21816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.ArrayList; 22816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport java.util.List; 23816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 2495961816a768da387f0b5523cf4363ace2044089Nick Chalko/** An adapter of options that can accepts customization data. */ 25816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkopublic abstract class CustomizableOptionsRowAdapter extends OptionsRowAdapter { 26816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko private final List<CustomAction> mCustomActions; 27816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 28816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public CustomizableOptionsRowAdapter(Context context, List<CustomAction> customActions) { 29816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko super(context); 30816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko mCustomActions = customActions; 31816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 32816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 33816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Subclass should implement this and return list of {@link MenuAction}. 34816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Custom actions will be added at the first or the last position in addition. 35816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Note that {@link MenuAction} should have non-negative type 36816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // because negative types are reserved for custom actions. 37816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected abstract List<MenuAction> createBaseActions(); 38816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 39816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Subclass should implement this to perform proper action 40816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // for {@link MenuAction} with the given type returned by {@link createBaseActions}. 41816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected abstract void executeBaseAction(int type); 42816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 43816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 44816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected List<MenuAction> createActions() { 45816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko List<MenuAction> actions = new ArrayList<>(createBaseActions()); 46816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 47816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (mCustomActions != null) { 48816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int position = 0; 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko for (int i = 0; i < mCustomActions.size(); i++) { 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko // Type of MenuAction should be unique in the Adapter. 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int type = -(i + 1); 52816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko CustomAction customAction = mCustomActions.get(i); 5395961816a768da387f0b5523cf4363ace2044089Nick Chalko MenuAction action = 5495961816a768da387f0b5523cf4363ace2044089Nick Chalko new MenuAction( 5595961816a768da387f0b5523cf4363ace2044089Nick Chalko customAction.getTitle(), type, customAction.getIconDrawable()); 56816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 57816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (customAction.isFront()) { 58816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko actions.add(position++, action); 59816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 60816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko actions.add(action); 61816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 62816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 63816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 64816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return actions; 65816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 66816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 67816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko @Override 68816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected void executeAction(int type) { 69816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (type < 0) { 70816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko int position = -(type + 1); 71816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko getMainActivity().startActivitySafe(mCustomActions.get(position).getIntent()); 72816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } else { 73816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko executeBaseAction(type); 74816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 75816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 76816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko 77816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko protected List<CustomAction> getCustomActions() { 78816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return mCustomActions; 79816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko } 80816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko} 81