package com.iwedia.gui.multimedia; import android.app.Activity; import android.view.KeyEvent; import android.view.View; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import com.iwedia.comm.content.Content; import com.iwedia.comm.content.multimedia.MultimediaContent; import com.iwedia.gui.MainActivity; import com.iwedia.gui.content_list.ContentListHandler; import com.iwedia.gui.content_list.GridViewScroller; import com.iwedia.gui.osd.OSDGlobal; /** * Handler for drawing favorite content in content list * * @author Veljko Ilkic */ public class MultimediaFavoriteHandler { /** Reference of main activity */ private Activity activity; /** Drawing handler object */ private MultimediaGridHelper contentHelper; /** Number of visible items on screen */ public static final int MULTIMEDIA_FAVORITE_ITEMS_PER_SCREEN = 6; /** Grid view container */ private GridView multimediaGridFavorite; /** Adapter for grid view */ public MultimediaFavoriteGridAdapter multimediaFavoriteGridAdapter; /** Number of items in favorite grid view */ public static int multimediaFavoriteNumberOfItems; /** Current items visible on screen */ public static Content[] multimediaFavoriteCurrentItems = new MultimediaContent[MULTIMEDIA_FAVORITE_ITEMS_PER_SCREEN]; /** GridView scroller */ private GridViewScroller gridViewScroller; /** Cool down period counters for right and left keys */ private long rightKeyCoolDownPeriod = 0; private long leftKeyCoolDownPeriod = 0; /** Constructor 1 */ public MultimediaFavoriteHandler(Activity activity, GridView gridView, boolean contentList_multimedia) { super(); // Take reference of main activity this.activity = activity; // Take reference of grid view this.multimediaGridFavorite = gridView; } /** Init function */ public void initView() { // Create content helper contentHelper = new MultimediaGridHelper(activity); // Set number of columns multimediaGridFavorite .setNumColumns(ContentListHandler.NUMBER_OF_COLUMNS); multimediaGridFavorite.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); // Attach adapter multimediaFavoriteGridAdapter = new MultimediaFavoriteGridAdapter(); multimediaGridFavorite.setAdapter(multimediaFavoriteGridAdapter); // Attach listeners multimediaGridFavorite.setOnKeyListener(new FavoriteGridKeyListener()); multimediaGridFavorite .setOnItemClickListener(new FavoriteGridOnItemClick()); // Create scroller gridViewScroller = new GridViewScroller( GridViewScroller.MULTIMEDIA_FIRST_FAVORITE, 1, 6, multimediaFavoriteGridAdapter, multimediaGridFavorite, multimediaFavoriteCurrentItems); } /** Init data */ public void initData() { gridViewScroller.initData(multimediaFavoriteNumberOfItems); // Hide arrows from favorite list if there isn't enough content items if (multimediaFavoriteNumberOfItems < MULTIMEDIA_FAVORITE_ITEMS_PER_SCREEN) { ((MainActivity) activity).getMultimediaHandler() .hideFirstScreenFavoriteArrows(); } else { ((MainActivity) activity).getMultimediaHandler() .showFirstScreenFavoriteArrows(); } } /** Focus active element on beginning */ public void focusActiveElement(int activeElement) { multimediaGridFavorite.requestFocusFromTouch(); multimediaGridFavorite.setSelection(activeElement % MULTIMEDIA_FAVORITE_ITEMS_PER_SCREEN); } /** Check focused element for scrolling right */ private boolean checkFocusNextFavorite() { if (multimediaGridFavorite.getSelectedItemPosition() == 5) { return true; } return false; } /** Check focused element for scrolling left */ private boolean checkFocusPreviousFavorite() { if (multimediaGridFavorite.getSelectedItemPosition() == 0) { return true; } return false; } /** Grid adapter for favorite */ public class MultimediaFavoriteGridAdapter extends BaseAdapter { @Override public int getCount() { return multimediaFavoriteCurrentItems.length; } @Override public Object getItem(int position) { return multimediaFavoriteCurrentItems[position]; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View retVal = contentHelper .prepareDataForAdapter((MultimediaContent) multimediaFavoriteCurrentItems[position]); // If first item is visible hide left arrow if (gridViewScroller.getIndexOfFirstElement() == 0) { ((MainActivity) activity).getMultimediaHandler() .getFirstScreenRecentlyLeftArrow() .setVisibility(View.INVISIBLE); } // First element isn't visible show left arrow else { ((MainActivity) activity).getMultimediaHandler() .getFirstScreenRecentlyLeftArrow() .setVisibility(View.VISIBLE); } if (gridViewScroller.getIndexOfLastElement() == multimediaFavoriteNumberOfItems - 1) { if (position == MULTIMEDIA_FAVORITE_ITEMS_PER_SCREEN - 1 || position == multimediaFavoriteNumberOfItems - 1) { // Hide divider of right ImageView dividerSmall = (ImageView) retVal .findViewById(com.iwedia.gui.R.id.contentDividerSmall); dividerSmall.setImageBitmap(null); ImageView dividerBig = (ImageView) retVal .findViewById(com.iwedia.gui.R.id.contentDividerBig); dividerBig.setImageBitmap(null); } ((MainActivity) activity).getMultimediaHandler() .getFirstScreenFavoriteRightArrow() .setVisibility(View.INVISIBLE); } // Last element isn't visible show right arrow else { ((MainActivity) activity).getMultimediaHandler() .getFirstScreenFavoriteRightArrow() .setVisibility(View.VISIBLE); } return retVal; } } /** Get selected real selected position */ private int getSelectedPosition() { try { return gridViewScroller.getIndexOfFirstElement() + multimediaGridFavorite.getSelectedItemPosition(); } catch (Exception e) { return 0; } } /** Select upper grid */ private void selectGridUp() { // Select recently grid if its available if (((MainActivity) activity).getMultimediaHandler() .getMultimediaRecentlyHandler().getMultimediaGridRecently() .isFocusable()) { ((MainActivity) activity).getMultimediaHandler() .getMultimediaRecentlyHandler().focusActiveElement(0); } } /** Select grid below */ private void selectGridDown() { // Select all grid if it's available if (((MainActivity) activity).getMultimediaHandler() .getMultimediaFileBrowserFirstHandler().getGridFileBrowser() .isFocusable()) { ((MainActivity) activity).getMultimediaHandler() .getMultimediaFileBrowserFirstHandler() .focusActiveElement(0); } } /** Key listener for grid */ private class FavoriteGridKeyListener implements OnKeyListener { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: { selectGridUp(); return true; } case KeyEvent.KEYCODE_DPAD_DOWN: { selectGridDown(); return true; } case KeyEvent.KEYCODE_DPAD_RIGHT: { if (MainActivity.enableKeyHandlingCoolDownPerion) { // Ignore cool down first time and key handling // wasn't // active for some time if (rightKeyCoolDownPeriod != 0 && (System.currentTimeMillis() + 2 * MainActivity.KEY_HANDLING_COOL_DOWN_PERIOD > rightKeyCoolDownPeriod)) { // Check when last time key event was here if (System.currentTimeMillis() - rightKeyCoolDownPeriod < MainActivity.KEY_HANDLING_COOL_DOWN_PERIOD && System.currentTimeMillis() - rightKeyCoolDownPeriod > 0) { return true; } } rightKeyCoolDownPeriod = System.currentTimeMillis(); } // Check if focus can move right if (getSelectedPosition() + 1 > multimediaFavoriteNumberOfItems - 1) { return true; } if (checkFocusNextFavorite()) { // scrollRightFavorite(); gridViewScroller.scrollRight(); return true; } return false; } case KeyEvent.KEYCODE_DPAD_LEFT: { // Check if cool down period is enabled if (MainActivity.enableKeyHandlingCoolDownPerion) { // Check when last time key event was here if (System.currentTimeMillis() - leftKeyCoolDownPeriod < MainActivity.KEY_HANDLING_COOL_DOWN_PERIOD && System.currentTimeMillis() - rightKeyCoolDownPeriod > 0) { return true; } leftKeyCoolDownPeriod = System.currentTimeMillis(); } if (checkFocusPreviousFavorite()) { // scrollLeftFavorite(); gridViewScroller.scrollLeft(); return true; } return false; } case KeyEvent.KEYCODE_0: { // pageNextFavorite(); gridViewScroller.pageNext(); return false; } case KeyEvent.KEYCODE_1: { // pagePreviousFavorite(); gridViewScroller.pagePrevious(); return false; } } return false; } return false; } } /** OnItemClick listener for grid */ private class FavoriteGridOnItemClick implements OnItemClickListener, OSDGlobal { // TODO: Applies only on main display int mDisplayId = 0; @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // Get clicked content object MultimediaContent contentClicked = (MultimediaContent) multimediaFavoriteCurrentItems[arg2]; if (contentClicked != null) { contentHelper.goContent(contentClicked, false, mDisplayId); } } } /** Set current screen */ public void setCurrentPage(int indexOfCurrentPage) { gridViewScroller.setIndexOfCurrentScreen(0); } // ////////////////////////////////// // Getters and setters // ////////////////////////////////// public MultimediaFavoriteGridAdapter getFavoriteGridAdapter() { return multimediaFavoriteGridAdapter; } public GridView getMultimediaGridFavorite() { return multimediaGridFavorite; } }