package com.iwedia.gui.content_list; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.RemoteException; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import com.iwedia.comm.content.Content; import com.iwedia.comm.content.IContentFilter; import com.iwedia.comm.enums.FilterType; import com.iwedia.comm.enums.ServiceListIndex; import com.iwedia.dtv.service.Service; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVButton; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.components.A4TVToast; import com.iwedia.gui.config_handler.ConfigHandler; import com.iwedia.gui.listeners.MainKeyListener; import java.util.ArrayList; /** * Content list handler class * * @author Veljko Ilkic */ public class ContentListHandler { public static final String TAG = "ContentListHandler"; /** Categories of content in content list */ public static final int RECENTLY_WATCHED = 1; public static final int FAVORITES = 2; public static final int ALL = 3; /** Position of item in page */ public static int focusPosition = 0; /** Number of columns in grids */ public static final int NUMBER_OF_COLUMNS = 6; /** Reference of main activity */ private Activity activity; /** Dialog holder content list */ private A4TVDialog contentListDialog; // ///////////////////////////////////////// // Views // ///////////////////////////////////////// /** Main layout of content list important for animation */ private LinearLayout contentListMainLayout; /** Scroll view for filtering options */ private HorizontalScrollView contentFilterOptionsScroll; /** Layout holder for filter buttons */ private LinearLayout filterButtonsHolder; /** Scroll views in content list */ private GridView gridViewRecently, gridViewFavorites, gridViewAll; /** Dividers in grid view */ private ImageView recentlyGridDivider, favortiteGridDivider, allFirstGridDivider, allSecondGridDivider, allThirdGridDivider; /** Arrow images */ private ImageView contentRecentlyArrowLeft, contentRecentlyArrowRight, contentFavoriteArrowLeft, contentFavoriteArrowRight, contentAllArrowLeft, contentAllArrowRight; /** Animation in */ private Animation translationLeftIn; /** Animation out */ private Animation translationLeftOut; /** Handlers for drawing items */ private RecentlyHandler recentlyHandler; private FavoriteHandler favoriteHandler; private AllHandler allHandler; /** Layout inflater for filter buttons */ private LayoutInflater inflater; // ////////////////////////////////////////////////////////////// // Dynamic filtering fields // /////////////////////////////////////////////////////////////// /** Value of current selected filtering option in list */ public static int currentSelectedFilterOption = 0; /** Number of possible filter options */ public static final int numberOfFilterOptions = 5; /** Number of favorite lists (user defined and op profile) */ public static int numberOfServiceLists = 0; public static final int MAX_NUMBER_OF_FAVORITE_LISTS = 30; /** Filter options ids */ private static boolean all_tab_option; private static boolean ip_tab_option; private static boolean input_tab_option; private static boolean apps_tab_option; private static boolean widgets_tab_option; /** Store last accessed filter */ public static int CONTENT_LIST_LAST_FILTER = 0; /** Store active filter on content list show */ public static int CONTENT_LIST_ON_OPEN_FILTER = 0; /** Screen width */ private int screenWidth; /** Width measure unit */ private int widthMeasureUnit; /** Width measure unit divider */ public static final int widthMeasureUnitDivider = 12; /** Available service lists filter options */ private Boolean[] serviceListsTabOptions; /** Array list of filter buttons */ private ArrayList<LinearLayout> filterButtons = new ArrayList<LinearLayout>(); protected static final int NUMBER_OF_MILISECONDS_FOR_SERVICECHANGE = 1000; // TODO: Applies on main channel only private int mDisplayId = 0; /** Constructor 1 */ public ContentListHandler(Activity activity) { super(); // Take reference of main activity this.activity = activity; // Get layout iflater this.inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); try { numberOfServiceLists = MainActivity.service.getContentListControl() .getNumberOfServiceLists(); } catch (RemoteException e) { e.printStackTrace(); } // Init filter option array initFilterOptionArray(); } /** Default values of filter option array */ private void initFilterOptionArray() { serviceListsTabOptions = new Boolean[MAX_NUMBER_OF_FAVORITE_LISTS]; all_tab_option = true; ip_tab_option = ConfigHandler.IP; input_tab_option = ConfigHandler.TV_FEATURES; apps_tab_option = true; widgets_tab_option = true; // Init favorite lists filters flags for (int i = 1; i < numberOfServiceLists; i++) { serviceListsTabOptions[i] = true; } try { MainActivity.service.getContentListControl().refreshServiceLists(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** Reinit filter option array if service list number has been changed */ public void reinitFilterOptionArray() { Log.d(TAG, "reinitFilterOptionArray"); int newNumberOfFavoriteLists = numberOfServiceLists; // Get number of service list try { newNumberOfFavoriteLists = MainActivity.service .getContentListControl().getNumberOfServiceLists(); } catch (RemoteException e) { e.printStackTrace(); } for (int i = 1; i < newNumberOfFavoriteLists; i++) { serviceListsTabOptions[i] = true; } numberOfServiceLists = newNumberOfFavoriteLists; // Redraw filter option array loadFilterOptionsLayout(); } /** Init function */ public void init() { // Get screen width of activity screenWidth = activity.getWindowManager().getDefaultDisplay() .getWidth(); // Calculate width unit for filter buttons widthMeasureUnit = screenWidth / widthMeasureUnitDivider; // ///////////////////////////////////////// // Dialog // ///////////////////////////////////////// // Create dialog holder for content list menu contentListDialog = ((MainActivity) activity).getDialogManager() .getContentDialog(); // Attach key listener if (contentListDialog != null) contentListDialog.setOnKeyListener(new MainKeyListener( (MainActivity) activity)); // ////////////////////////////////////////////// // Views // ////////////////////////////////////////////// // Init views in content list dialog // if (((MainActivity) activity).isFullHD() && contentListDialog != // null) { // A4TVTextView topBanner = (A4TVTextView) contentListDialog // .findViewById(R.id.contentListText); // topBanner.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.a4tvdialog_button_text_size_1080p)); // } // Take reference of main content list layout if (contentListDialog != null) contentListMainLayout = (LinearLayout) contentListDialog .findViewById(com.iwedia.gui.R.id.contentListMainLayout); // Take reference of horizontal scroll view for filter options if (contentListDialog != null) contentFilterOptionsScroll = (HorizontalScrollView) contentListDialog .findViewById(com.iwedia.gui.R.id.contentFilterOptionsScroll); // contentFilterOptionsScroll.setEnabled(false); // contentFilterOptionsScroll.setFocusable(false); // contentFilterOptionsScroll.setClickable(false); // Take reference of filter buttons holder layout if (contentListDialog != null) filterButtonsHolder = (LinearLayout) contentListDialog .findViewById(com.iwedia.gui.R.id.contentListInputFilterBanner); // Load filter buttons loadFilterOptionsLayout(); // ////////////////////////////////////// // Grid dividers // ////////////////////////////////////// if (contentListDialog != null) { recentlyGridDivider = (ImageView) contentListDialog .findViewById(com.iwedia.gui.R.id.recentlyGridDivider); favortiteGridDivider = (ImageView) contentListDialog .findViewById(com.iwedia.gui.R.id.favoriteGridDivider); allFirstGridDivider = (ImageView) contentListDialog .findViewById(com.iwedia.gui.R.id.allItemFirstGridDivider); allSecondGridDivider = (ImageView) contentListDialog .findViewById(com.iwedia.gui.R.id.allItemSecondGridDivider); allThirdGridDivider = (ImageView) contentListDialog .findViewById(com.iwedia.gui.R.id.allItemThirdGridDivider); } setUpDividers(); // //////////////////////////////////////////// // Grid arrows // //////////////////////////////////////////// if (contentListDialog != null) { contentRecentlyArrowLeft = (ImageView) contentListDialog .findViewById(R.id.contentRecentlyListLeftArrow); contentRecentlyArrowRight = (ImageView) contentListDialog .findViewById(R.id.contentRecentlyListRightArrow); contentFavoriteArrowLeft = (ImageView) contentListDialog .findViewById(R.id.contentFavoriteListLeftArrow); contentFavoriteArrowRight = (ImageView) contentListDialog .findViewById(R.id.contentFavoriteListRightArrow); contentAllArrowLeft = (ImageView) contentListDialog .findViewById(R.id.contentAllListLeftArrow); contentAllArrowRight = (ImageView) contentListDialog .findViewById(R.id.contentAllListRightArrow); } // ///////////////////////////////// // Grid views and drawing handlers // ///////////////////////////////// if (contentListDialog != null) gridViewRecently = (GridView) contentListDialog .findViewById(com.iwedia.gui.R.id.recentlyWatchedItemsGrid); if (gridViewRecently != null) { recentlyHandler = new RecentlyHandler(activity, gridViewRecently); } if (recentlyHandler != null) { recentlyHandler.initView(); } if (contentListDialog != null) gridViewFavorites = (GridView) contentListDialog .findViewById(com.iwedia.gui.R.id.favoriteItemsGrid); favoriteHandler = new FavoriteHandler(activity, gridViewFavorites); favoriteHandler.initView(); if (contentListDialog != null) gridViewAll = (GridView) contentListDialog .findViewById(com.iwedia.gui.R.id.allItemsGrid); if (gridViewAll != null) { allHandler = new AllHandler(activity, gridViewAll); } if (allHandler != null) { allHandler.initView(); } // /////////////////////////////////////////////////// // Attach onLong press listener of grid views // /////////////////////////////////////////////////// if (recentlyHandler != null) recentlyHandler.getGridRecently().setOnItemLongClickListener( new GridOnLongPress(activity, GridOnLongPress.RECENTLY_CONTENT_LIST)); favoriteHandler.getGridFavorite().setOnItemLongClickListener( new GridOnLongPress(activity, GridOnLongPress.FAVORITE_CONTENT_LIST)); if (allHandler != null) allHandler.getGridAll().setOnItemLongClickListener( new GridOnLongPress(activity, GridOnLongPress.ALL_CONTENT_LIST)); // ////////////////////////////////////////////// // Animations // ////////////////////////////////////////////// // Load animation opening and closing translationLeftIn = AnimationUtils.loadAnimation(activity, com.iwedia.gui.R.anim.translate_left_channel_list); translationLeftOut = AnimationUtils.loadAnimation(activity, com.iwedia.gui.R.anim.translate_left_exit_channel_list); // Animation listener for in animation translationLeftIn.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { contentListMainLayout.setVisibility(View.VISIBLE); } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } }); // Animation listener for out animation translationLeftOut.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { // Close content list contentListDialog.cancel(); // Open main menu if needed if (MainKeyListener.contentListFromMainMenu) { if (MainKeyListener.getAppState() != MainKeyListener.CLEAN_SCREEN) { ((MainActivity) activity).getMainMenuHandler() .showMainMenu(); // //////////////////////////////////////////////// // Gallery unscaled and unrotated images bug fix // //////////////////////////////////////////////// Handler delay = new Handler(); delay.postDelayed(new Runnable() { @Override public void run() { ((MainActivity) activity).getMainMenuHandler() .getA4TVOnSelectLister() .startAnimationsManual(); } }, 50); } MainKeyListener.contentListFromMainMenu = false; } else { MainKeyListener.returnToStoredAppState(); } } }); } /** Show content list dialog on screen */ public void showContentList() { // Show content list MainKeyListener.setAppState(MainKeyListener.CONTENT_LIST); // Reinit filter option array if needed reinitFilterOptionArray(); // Invisible main layout if (MainActivity.enabledAnimations) { contentListMainLayout.setVisibility(View.INVISIBLE); } // Show content list dialog if (contentListDialog != null) { contentListDialog.show(); } // Start animation if (MainActivity.enabledAnimations) { animateInContentListDialog(); } try { CONTENT_LIST_ON_OPEN_FILTER = MainActivity.service .getContentListControl().getActiveFilterIndex(); currentSelectedFilterOption = ContentListHandler.CONTENT_LIST_ON_OPEN_FILTER; } catch (RemoteException e) { e.printStackTrace(); } } /** Hide content list dialog from screen */ public void closeContentList() { // Animation for closing content list if (MainActivity.enabledAnimations) { animateOutContentListDialog(); } else { contentListDialog.cancel(); } } /** In animation for content list */ public void animateInContentListDialog() { // Animate views contentListMainLayout.startAnimation(translationLeftIn); } /** Out animation for main menu */ public void animateOutContentListDialog() { // Animate out contentListMainLayout.startAnimation(translationLeftOut); } /** Include Inputs in as filtering option */ public void enableInputs() { input_tab_option = true; } /** Include IP in as filtering option */ public void enableIP() { ip_tab_option = true; } /** Load fiter opitons layout */ private void loadFilterOptionsLayout() { // Clear lists of filter buttons filterButtonsHolder.removeAllViews(); filterButtons.clear(); if (all_tab_option) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton allButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); // allButton.setFocusable(false); allButton.setText(activity.getResources().getString( com.iwedia.gui.R.string.main_menu_content_list_filter_all)); // if (((MainActivity) activity).isFullHD()) { // allButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // allButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } // Attach click listener allButton.setOnClickListener(new FilterOnClick(FilterType.ALL)); allButton.setOnLongClickListener(new TabOnLongPress(activity, 0)); // Attach key listener on filter options list allButton.setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(FilterType.ALL); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } // ////////////////////////////////////////////// // Add favorite tabs // ////////////////////////////////////////////// for (int i = 1; i < numberOfServiceLists; i++) { if (serviceListsTabOptions[i]) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton serviceListButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); try { IContentFilter contentFilter = MainActivity.service .getContentListControl().getContentFilter(i); serviceListButton.setText(contentFilter .getContentListName()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } // if (((MainActivity) activity).isFullHD()) { // favoriteButton // .setTextSize(activity // .getResources() // .getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // favoriteButton // .setTextSize(activity // .getResources() // .getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } Drawable img = activity.getResources().getDrawable( R.drawable.operator_profile_filter_option); img.setBounds(0, 0, 23, 18); serviceListButton.setCompoundDrawables(img, null, null, null); serviceListButton.setPadding( (int) activity.getResources().getDimension( com.iwedia.gui.R.dimen.content_filter_padding), 0, 0, 0); serviceListButton.setOnClickListener(new FilterOnClick(i)); serviceListButton.setOnLongClickListener(new TabOnLongPress( activity, i)); // Attach key listener on filter options list serviceListButton .setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(i); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } } if (ip_tab_option) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton dataButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); // dataButton.setFocusable(false); dataButton.setText(activity.getResources().getString( com.iwedia.gui.R.string.main_menu_content_list_ip)); // if (((MainActivity) activity).isFullHD()) { // dataButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // dataButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } Drawable img = activity.getResources().getDrawable( R.drawable.ip_filter_option); img.setBounds(0, 0, 23, 18); dataButton.setCompoundDrawables(img, null, null, null); dataButton.setPadding( (int) activity.getResources().getDimension( com.iwedia.gui.R.dimen.content_filter_padding), 0, 0, 0); dataButton.setOnClickListener(new FilterOnClick( FilterType.IP_STREAM)); dataButton.setOnLongClickListener(new TabOnLongPress(activity, FilterType.IP_STREAM)); // Attach key listener on filter options list dataButton.setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(FilterType.IP_STREAM); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } if (input_tab_option) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton inputButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); // inputButton.setFocusable(false); inputButton.setText(activity.getResources().getString( com.iwedia.gui.R.string.main_menu_content_list_inputs)); // if (((MainActivity) activity).isFullHD()) { // inputButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // inputButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } Drawable img = activity.getResources().getDrawable( R.drawable.inputs_filter_option); img.setBounds(0, 0, 23, 18); inputButton.setCompoundDrawables(img, null, null, null); inputButton.setPadding( (int) activity.getResources().getDimension( com.iwedia.gui.R.dimen.content_filter_padding), 0, 0, 0); inputButton .setOnClickListener(new FilterOnClick(FilterType.INPUTS)); inputButton.setOnLongClickListener(new TabOnLongPress(activity, FilterType.INPUTS)); // Attach key listener on filter options list inputButton.setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(FilterType.INPUTS); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } if (apps_tab_option) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton appsButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); // appsButton.setFocusable(false); appsButton.setText(activity.getResources().getString( com.iwedia.gui.R.string.main_menu_content_list_apps)); // if (((MainActivity) activity).isFullHD()) { // appsButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // appsButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } Drawable img = activity.getResources().getDrawable( R.drawable.apps_filter_option); img.setBounds(0, 0, 23, 18); appsButton.setCompoundDrawables(img, null, null, null); appsButton.setPadding( (int) activity.getResources().getDimension( com.iwedia.gui.R.dimen.content_filter_padding), 0, 0, 0); appsButton.setOnClickListener(new FilterOnClick(FilterType.APPS)); appsButton.setOnLongClickListener(new TabOnLongPress(activity, FilterType.APPS)); // Attach key listener on filter options list appsButton.setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(FilterType.APPS); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } if (widgets_tab_option) { LinearLayout filterItem = (LinearLayout) inflater.inflate( com.iwedia.gui.R.layout.content_list_filter_item, null); A4TVButton widgetsButton = (A4TVButton) filterItem .findViewById(com.iwedia.gui.R.id.filterButton); // widgetsButton.setFocusable(false); widgetsButton.setText(activity.getResources().getString( com.iwedia.gui.R.string.main_menu_content_list_widgets)); // if (((MainActivity) activity).isFullHD()) { // widgetsButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size_1080p)); // } else { // widgetsButton.setTextSize(activity.getResources().getDimension( // com.iwedia.gui.R.dimen.content_filter_text_size)); // } Drawable img = activity.getResources().getDrawable( R.drawable.widget_filter_option); img.setBounds(0, 0, 23, 18); widgetsButton.setCompoundDrawables(img, null, null, null); widgetsButton.setPadding( (int) activity.getResources().getDimension( com.iwedia.gui.R.dimen.content_filter_padding), 0, 0, 0); widgetsButton.setOnClickListener(new FilterOnClick( FilterType.WIDGETS)); widgetsButton.setOnLongClickListener(new TabOnLongPress(activity, FilterType.WIDGETS)); // Attach key listener on filter options list widgetsButton.setOnKeyListener(new FilterOptionsKeyListener()); setFilterItemParams(filterItem); filterItem.setTag(FilterType.WIDGETS); filterButtons.add(filterItem); filterButtonsHolder.addView(filterItem); } // Remove divider from last filter button ImageView filterDivider = (ImageView) filterButtons.get( filterButtons.size() - 1).findViewById( com.iwedia.gui.R.id.filterButtonDivider); filterDivider.setBackgroundColor(Color.TRANSPARENT); filterButtonsHolder.invalidate(); } /** Customize filter item */ private void setFilterItemParams(LinearLayout filterItem) { LinearLayout.LayoutParams filterItemParams = new LinearLayout.LayoutParams( widthMeasureUnit, LayoutParams.MATCH_PARENT, Gravity.CENTER); filterItem.setLayoutParams(filterItemParams); // filterItem.setEnabled(false); // filterItem.setFocusable(false); filterItem.setClickable(true); filterItem.setGravity(Gravity.CENTER); } /** Filter content of content list */ public void filterContent(final int filter, boolean isInitial) { int currentSelectedFilterButton = 0; // Deselect all options and find index of filter option in // list for (int i = 0; i < filterButtons.size(); i++) { filterButtons.get(i).setSelected(false); if ((Integer) filterButtons.get(i).getTag() == filter) { currentSelectedFilterButton = i; } } filterButtons.get(currentSelectedFilterButton).setSelected(true); // Proceed with filtering and loading content try { MainActivity.service.getContentListControl().setActiveFilter( (Integer) filterButtons.get(currentSelectedFilterButton) .getTag()); // ZORANA! // OProfile - must send enter when oppening favorite list, and // exit if exiting favorite list ... // TODO - find a way to determine is it favorite list without math // ... this is bad approach // it should be easy to change size of fav lists - see how to make // this offset less hardcoded // move this to service - when favorite is set to active - send this // notification int serviceListIndex = MainActivity.service.getContentListControl() .getActiveContentFilter().getServiceListIndex(); if (serviceListIndex >= ServiceListIndex.FAVORITE) { // in case it is not closed ... MainActivity.service.getCIControl().exitOperatorProfile(); MainActivity.service.getCIControl().enterOperatorProfile( serviceListIndex); } else { MainActivity.service.getCIControl().exitOperatorProfile(); } } catch (Exception e) { e.printStackTrace(); } requestContentItems((Integer) filterButtons.get( currentSelectedFilterButton).getTag()); } /** Select filter option */ public void selectFilter(final int filterType) { Log.d(TAG, "selectFilter - filterType: " + filterType); // Return focus position on zero focusPosition = 0; currentSelectedFilterOption = filterType; // Load filter filterContent((currentSelectedFilterOption), false); } /** Sync filter indexes */ public static void syncFilterIndexes(final boolean changeFilter) { // Store last active filter try { if (changeFilter == false) { MainActivity.service.getContentListControl().setActiveFilter( ContentListHandler.CONTENT_LIST_ON_OPEN_FILTER); ContentListHandler.CONTENT_LIST_LAST_FILTER = ContentListHandler.CONTENT_LIST_ON_OPEN_FILTER; } else { ContentListHandler.CONTENT_LIST_LAST_FILTER = currentSelectedFilterOption; } } catch (RemoteException e) { e.printStackTrace(); } } /** * Request new content items from service * * @param initLoad * If content list data needs to be initialized */ public void requestContentItems(final int filter) { if (MainActivity.service != null) { try { // Load number of contents per sublist RecentlyHandler.recentlyNumberOfItems = MainActivity.service .getContentListControl().getRecenltyWatchedListSize(); FavoriteHandler.favoriteNumberOfItems = MainActivity.service .getContentListControl().getFavoritesSize(); AllHandler.allNumberOfItems = MainActivity.service .getContentListControl().getContentListSizeVisible(); } catch (Exception e) { e.printStackTrace(); } // //////////////////////////////////////// // Prepare data for focusing // //////////////////////////////////////// // ////////////////////////////////////// // Set current visible screen // ////////////////////////////////////// recentlyHandler.setCurrentPage(0); favoriteHandler.setCurrentPage(0); int position = setCurrentScreen(filter); // ////////////////////////////////////// // Recently watched // ////////////////////////////////////// recentlyHandler.initData(); // ////////////////////////////////////// // Favorites // ////////////////////////////////////// favoriteHandler.initData(); // ////////////////////////////////////// // All // ////////////////////////////////////// allHandler.initData(); allHandler.focusActiveElement(position); // Focus content // focusContent(filter, position); } else { // //////////////////////////////// // Show error message // //////////////////////////////// new Handler().post(new Runnable() { @Override public void run() { A4TVToast toast = new A4TVToast(activity); toast.showToast(com.iwedia.gui.R.string.proxy_service_is_null); } }); } } /** Set current screen in all list */ private int setCurrentScreen(int filter) { // Get active content from service Content activeContent; try { activeContent = MainActivity.service.getContentListControl() .getActiveContent(mDisplayId); // Position int position = 0; // Check if active content exists if (activeContent != null) { switch (filter) { case FilterType.ALL: position = MainActivity.service.getContentListControl() .getContentIndexInAllList(activeContent); break; case FilterType.INPUTS: if (activeContent.getFilterType() == FilterType.INPUTS) { position = activeContent.getIndex(); } else { position = 0; } break; case FilterType.IP_STREAM: case FilterType.APPS: case FilterType.WIDGETS: position = 0; break; default: Service activeService = MainActivity.service .getServiceControl().getActiveService(); if (activeService.getListIndex() != filter) { position = 0; } else { position = activeService.getServiceIndex(); } break; } } allHandler.setCurrentScreen(position); return position; } catch (Exception e) { allHandler.setCurrentScreen(0); e.printStackTrace(); } return 0; } /** Focus content in content list */ public void focusContent(int filter) { // ////////////////////////////////////// // Focus active tv service // ////////////////////////////////////// if (filter == FilterType.ALL) { // Current active index service int currentActiveIndex = 0; try { currentActiveIndex = MainActivity.service .getContentListControl().getActiveContent(mDisplayId) .getIndex(); } catch (Exception e) { e.printStackTrace(); } // Focus active tv service allHandler.focusActiveElement(currentActiveIndex); } else { // Focus first element allHandler.focusActiveElement(0); } } // /** Check if content is active */ // public boolean isContentActive(Content content, int displayId) { // // // //////////////////////////////////////// // // TV, Data or Radio Service content // // ///////////////////////////////////////// // // // TODO check for IP // if (content instanceof ServiceContent || content instanceof IpContent) { // // try { // return content.equals(MainActivity.service // .getContentListControl().getActiveContent(displayId)); // } catch (Exception e) { // e.printStackTrace(); // return false; // } // } // // // ///////////////////////////////////////////// // // Widget content // // ///////////////////////////////////////////// // // if (content.getFilterType() == FilterType.WIDGETS) { // if (((MainActivity) activity).getWidgetsHandler() // .checkWidgetVisibility(content)) { // return true; // } else { // return false; // } // } // // return false; // } /** Hide navigation arrows from recently list */ public void hideArrowsRecentlyList() { contentRecentlyArrowRight.setVisibility(View.INVISIBLE); contentRecentlyArrowLeft.setVisibility(View.INVISIBLE); } /** Show navigation arrows in recently list */ public void showArrowsRecentlyList() { contentRecentlyArrowRight.setVisibility(View.VISIBLE); contentRecentlyArrowLeft.setVisibility(View.VISIBLE); } /** Hide navigation arrows from favorite list */ public void hideArrowsFavoriteList() { contentFavoriteArrowRight.setVisibility(View.INVISIBLE); contentFavoriteArrowLeft.setVisibility(View.INVISIBLE); } /** Show navigation arrows in favorite list */ public void showArrowsFavoriteList() { contentFavoriteArrowRight.setVisibility(View.VISIBLE); contentFavoriteArrowLeft.setVisibility(View.VISIBLE); } /** Hide navigation arrows from all list */ public void hideArrowsAllList() { contentAllArrowRight.setVisibility(View.INVISIBLE); contentAllArrowLeft.setVisibility(View.INVISIBLE); } /** Show navigation arrows in all list */ public void showArrowsAllList() { contentAllArrowRight.setVisibility(View.VISIBLE); contentAllArrowLeft.setVisibility(View.VISIBLE); } /** Set up position of grid dividers on screen */ public void setUpDividers() { // Check resolution and add layout params // ////////////////////////// // 720p // ////////////////////////// if (MainActivity.screenWidth == 1280) { FrameLayout.LayoutParams recentlyDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); recentlyDivParams.topMargin = 35; if (recentlyGridDivider != null) { recentlyGridDivider.setLayoutParams(recentlyDivParams); } FrameLayout.LayoutParams favoriteDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); favoriteDivParams.topMargin = 35; if (favortiteGridDivider != null) { favortiteGridDivider.setLayoutParams(favoriteDivParams); } FrameLayout.LayoutParams firstDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); firstDivParams.topMargin = 35; if (allFirstGridDivider != null) { allFirstGridDivider.setLayoutParams(firstDivParams); } // PE Android4TV if (MainActivity.screenHeight != MainActivity.SCREEN_HEIGHT_720P) { FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); secondDivParams.topMargin = 117; if (allSecondGridDivider != null) { allSecondGridDivider.setLayoutParams(secondDivParams); } FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); thirdDivParams.topMargin = 152; if (allThirdGridDivider != null) { allThirdGridDivider.setLayoutParams(thirdDivParams); } } // AMP Android4TV else { FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); secondDivParams.topMargin = 125; if (allSecondGridDivider != null) { allSecondGridDivider.setLayoutParams(secondDivParams); } FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); thirdDivParams.topMargin = 162; if (allThirdGridDivider != null) { allThirdGridDivider.setLayoutParams(thirdDivParams); } } } // //////////////////////////////// // 1080p // //////////////////////////////// if (MainActivity.screenWidth == 1920) { FrameLayout.LayoutParams recentlyDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); recentlyDivParams.topMargin = 50; if (recentlyGridDivider != null) { recentlyGridDivider.setLayoutParams(recentlyDivParams); } FrameLayout.LayoutParams favoriteDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); favoriteDivParams.topMargin = 50; if (favortiteGridDivider != null) { favortiteGridDivider.setLayoutParams(favoriteDivParams); } FrameLayout.LayoutParams firstDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); firstDivParams.topMargin = 50; if (allFirstGridDivider != null) { allFirstGridDivider.setLayoutParams(firstDivParams); } FrameLayout.LayoutParams secondDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); secondDivParams.topMargin = 194; if (allSecondGridDivider != null) { allSecondGridDivider.setLayoutParams(secondDivParams); } FrameLayout.LayoutParams thirdDivParams = new FrameLayout.LayoutParams( android.widget.FrameLayout.LayoutParams.MATCH_PARENT, android.widget.FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.TOP); thirdDivParams.topMargin = 244; if (allThirdGridDivider != null) { allThirdGridDivider.setLayoutParams(thirdDivParams); } } } // ////////////////////////////////////////////////// // Getters and Setters // ////////////////////////////////////////////////// /** Get reference of content list dialog */ public A4TVDialog getContentListDialog() { return contentListDialog; } /** Get reference of recently handler */ public RecentlyHandler getRecentlyHandler() { return recentlyHandler; } /** Get reference of favorite handler */ public FavoriteHandler getFavoriteHandler() { return favoriteHandler; } /** Get reference of all handler */ public AllHandler getAllHandler() { return allHandler; } /** Are inputs enabled */ public boolean areInputsEnabled() { return input_tab_option; } /** OnClick listener for filter buttons */ private class FilterOnClick implements OnClickListener { private int tag; public FilterOnClick(int tag) { this.tag = tag; } @Override public void onClick(View v) { selectFilter(tag); } } private class FilterOptionsKeyListener implements OnKeyListener { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) { if (((MainActivity) activity).getContentListHandler() .getRecentlyHandler().getGridRecently() .isFocusable()) { ((MainActivity) activity).getContentListHandler() .getRecentlyHandler().focusActiveElement(0); return true; } else if (((MainActivity) activity) .getContentListHandler().getFavoriteHandler() .getGridFavorite().isFocusable()) { ((MainActivity) activity).getContentListHandler() .getFavoriteHandler().focusActiveElement(0); return true; } else if (((MainActivity) activity) .getContentListHandler().getAllHandler() .getGridAll().isFocusable()) { ((MainActivity) activity).getContentListHandler() .getAllHandler().focusActiveElement(0); return true; } } else { return false; } } return false; } } // ////////////////////////////////// // Grid arrows // ////////////////////////////////// /** Get left arrow for recently grid */ public ImageView getContentRecentlyArrowLeft() { return contentRecentlyArrowLeft; } /** Get right arrow for recently grid */ public ImageView getContentRecentlyArrowRight() { return contentRecentlyArrowRight; } /** Get left arrow for favorite grid */ public ImageView getContentFavoriteArrowLeft() { return contentFavoriteArrowLeft; } /** Get right arrow for favorite grid */ public ImageView getContentFavoriteArrowRight() { return contentFavoriteArrowRight; } /** Get left arrow for favorite grid */ public ImageView getContentAllArrowLeft() { return contentAllArrowLeft; } /** Get right arrow for all grid */ public ImageView getContentAllArrowRight() { return contentAllArrowRight; } public HorizontalScrollView getContentFilterOptionsScroll() { return contentFilterOptionsScroll; } public ArrayList<LinearLayout> getFilterButtons() { return filterButtons; } }