package com.iwedia.gui.mainmenu; import android.app.Activity; import android.content.res.TypedArray; import android.util.Log; import com.iwedia.gui.MainActivity; import com.iwedia.gui.R; import com.iwedia.gui.components.A4TVDialog; import com.iwedia.gui.config_handler.ConfigHandler; /** * Content of main menu * * @author Veljko Ilkic */ public class MainMenuContent { /** Current state of main menu */ public static int currentState; public static int submenuRootResId; public static int submenuRootResIdPrevious; private static int mMenuID; public static final int DEFAULT_MENU = 0; public static final int HBB_TV_MENU = 1; /** Menu tree */ /** Main Menu first level */ public static final int MAIN_MENU = 0; /** Submenu second level */ public static final int CONTENT_LIST = 1; public static final int MULTIMEDIA = 2; public static final int APPLICATIONS = 3; public static final int INPUT_SELECTION = 4; public static final int GOOGLE_PLAY = 5; public static final int SETTINGS = 6; /** Sub menu second level */ public static final int TV_SETTINGS = 51; /** Sub menu third level */ public static final int SECURITY_SETTINGS = 511; // ////////////////////////////////////////// // Actions // ////////////////////////////////////////// public static final int OPEN_DIALOG = 80; public static final int LOAD_SUBMENU = 81; // /////////////////////////////////////////////// // Dialog actions // /////////////////////////////////////////////// /** Level zero */ public static final int OPEN_CONTENT_LIST = 90; public static final int OPEN_MULTIMEDIA = 91; public static final int OPEN_APPLICATIONS = 92; public static final int OPEN_INPUT_SELECTIONS = 93; public static final int OPEN_GOOGLE_PLAY = 94; /** Level one */ public static final int OPEN_NETWORK_DIALOG = 100; public static final int OPEN_TIME_AND_DATE = 101; public static final int OPEN_LANGUAGE_AND_KEYBOARD_DIALOG = 102; public static final int OPEN_INPUT_DEVICES_DIALOG = 103; public static final int OPEN_APPLICATIONS_DIALOG = 104; public static final int OPEN_EXTERNAL_AND_LOCAL_FILE_STORAGE_DIALOG = 105; public static final int OPEN_ACCOUNT_AND_SYNC_DIALOG = 106; public static final int OPEN_VOICE_INPUT_DIALOG = 107; public static final int OPEN_DLNA_SETTINGS = 108; public static final int OPEN_PRODUCT_INFO = 109; public static final int OPEN_SOFTWARE_UPGRADE = 110; public static final int OPEN_ENERGY_SAVE = 111; public static final int OPEN_FACTORY_RESET = 112; public static final int OPEN_TIMER = 113; /** Level two */ public static final int OPEN_CHANNEL_INSTALLATION_DIALOG = 200; public static final int OPEN_SOUND_SETTINGS_DIALOG = 201; public static final int OPEN_PICTURE_SETTINGS_DIALOG = 202; public static final int OPEN_SUBTITLE_DIALOG = 203; public static final int OPEN_HBB_SETTINGS_DIALOG = 204; public static final int OPEN_TELETEXT_SETTINGS_DIALOG = 205; public static final int OPEN_PVR_MENU = 206; /** Level three */ public static final int OPEN_PARENTAL_GUIDANCE_DIALOG = 300; public static final int OPEN_PASSWORD_DIALOG = 301; public static final int OPEN_PROGRAM_BLOCKING_DIALOG = 302; /** level four */ public static final int OPEN_CHANNEL_INSTALLATION_MANUAL_TUNING_DIALOG = 2001; public static final int OPEN_NETWORK_WIRELESS_SETTINGS_DIALOG = 1001; public static final int OPEN_NETWORK_ADVANCED_NETWORK_SETUP_DIALOG = 1002; // ////////////////////////////////////////// // Default icons // ////////////////////////////////////////// /** Main Menu Icons */ public static Integer[] mainMenuIcons; /** Settings icons */ public static Integer[] submenuSettings; /** TV Settings icons */ public static Integer[] submenuSettingsTvSettings; /** Security sub menu icons */ public static Integer[] submenuSettingsTvSecuritySettings; public MainMenuContent(Activity activity) { loadDefaultFromThemes(activity); } public void reloadFromThemes(int menuID) { switch (menuID) { case MAIN_MENU: mMenuID = menuID; Log.d(MainActivity.TAG, "HbbTV is not active load Main Menu"); loadDefaultFromThemes(MainActivity.activity); break; case HBB_TV_MENU: mMenuID = menuID; Log.d(MainActivity.TAG, "HbbTV is active, load HbbTV menu"); loadHBBFromThemes(MainActivity.activity); break; default: Log.e(MainActivity.TAG, "Unknown menu ID"); } } private void loadHBBFromThemes(Activity activity) { TypedArray atts; int listID; int attsSize; // /////////////////////////////////////////////////////// // TV SETTINGS OPTIONS // //////////////////////////////////////////////////////// atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.MainMenuIconsListsTVSettings2, R.attr.MainMenuIconsListsTVSettings3, R.attr.MainMenuIconsListsTVSettings5, }); attsSize = atts.getIndexCount(); mainMenuIcons = new Integer[attsSize]; int j = 0; for (int i = 0; i < attsSize; i++) { listID = atts.getResourceId(i, 0); mainMenuIcons[j] = listID; j++; } atts.recycle(); } private void loadDefaultFromThemes(Activity activity) { TypedArray atts; int listID; int attsSize; // ////////////////////////////////////////////////////// // MAIN MENU OPTIONS // ////////////////////////////////////////////////////// // get list of IDs of pictures atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.MainMenuIconsListsMain0, R.attr.MainMenuIconsListsMain1, R.attr.MainMenuIconsListsMain2, R.attr.MainMenuIconsListsMain3, R.attr.MainMenuIconsListsMain4, R.attr.MainMenuIconsListsMain5 }); attsSize = atts.getIndexCount(); // //////////////////////////// // NO TV FEATURES // //////////////////////////// if (!ConfigHandler.TV_FEATURES) { // ////////////////////////////////// // Hide input icon // ////////////////////////////////// mainMenuIcons = new Integer[attsSize - 1]; int j = 0; for (int i = 0; i < (attsSize); i++) { if (i != 3) { listID = atts.getResourceId(i, 0); mainMenuIcons[j] = listID;// activity.getResources().getIntArray(listID); j++; } } } // //////////////////////////// // DEFAULT config // //////////////////////////// else { mainMenuIcons = new Integer[attsSize]; for (int i = 0; i < attsSize; i++) { listID = atts.getResourceId(i, 0); mainMenuIcons[i] = listID;// activity.getResources().getIntArray(listID); } } // ///////////////////////////////////////////////// // SETTINGS OPTIONS // ////////////////////////////////////////////////// atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.MainMenuIconsListsSubSettings0, R.attr.MainMenuIconsListsSubSettings1, R.attr.MainMenuIconsListsSubSettings2, R.attr.MainMenuIconsListsSubSettings3, R.attr.MainMenuIconsListsSubSettings4, R.attr.MainMenuIconsListsSubSettings5, R.attr.MainMenuIconsListsSubSettings6, R.attr.MainMenuIconsListsSubSettings7, R.attr.MainMenuIconsListsSubSettings8, R.attr.MainMenuIconsListsSubSettings9, R.attr.MainMenuIconsListsSubSettings10, R.attr.MainMenuIconsListsSubSettings11, R.attr.MainMenuIconsListsSubSettings12, R.attr.MainMenuIconsListsSubSettings13, R.attr.MainMenuIconsListsSubSettings14 }); attsSize = atts.getIndexCount(); // //////////////////////////// // NO TV FEATURES OR DLNA // //////////////////////////// if ((!ConfigHandler.TV_FEATURES && ConfigHandler.DLNA) || (ConfigHandler.TV_FEATURES && !ConfigHandler.DLNA)) { // Hide input devices option if (!ConfigHandler.TV_FEATURES) { // hide input devices and energy save and voice input submenuSettings = new Integer[12]; } if (!ConfigHandler.DLNA) { // hide dlna settings submenuSettings = new Integer[14]; } int j = 0; for (int i = 0; i < attsSize; i++) { // Hide input devices and energy save and voice input if (!ConfigHandler.TV_FEATURES && i != 4 && i != 12 && i != 8) { listID = atts.getResourceId(i, 0); submenuSettings[j] = listID; j++; } // Hide dlna if (!ConfigHandler.DLNA && i != 9) { listID = atts.getResourceId(i, 0); submenuSettings[j] = listID; j++; } } } // ////////////////////////////// // NO DLNA AND NO TV FEATURES // ////////////////////////////// if (!ConfigHandler.DLNA && !ConfigHandler.TV_FEATURES) { // Hide input devices option submenuSettings = new Integer[attsSize - 4]; int j = 0; for (int i = 0; i < 15; i++) { if (i != 4 && i != 9 && i != 12 && i != 8) { listID = atts.getResourceId(i, 0); submenuSettings[j] = listID; j++; } } } // //////////////////////////// // DEFAULT config // //////////////////////////// if (ConfigHandler.DLNA && ConfigHandler.TV_FEATURES) { submenuSettings = new Integer[attsSize]; for (int i = 0; i < attsSize; i++) { listID = atts.getResourceId(i, 0); submenuSettings[i] = listID; } } // /////////////////////////////////////////////////////// // TV SETTINGS OPTIONS // //////////////////////////////////////////////////////// atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.MainMenuIconsListsTVSettings0, R.attr.MainMenuIconsListsTVSettings1, R.attr.MainMenuIconsListsTVSettings2, R.attr.MainMenuIconsListsTVSettings3, R.attr.MainMenuIconsListsTVSettings4, R.attr.MainMenuIconsListsTVSettings5, R.attr.MainMenuIconsListsTVSettings6, R.attr.MainMenuIconsListsTVSettings7, R.attr.MainMenuIconsListsTVSettings8, R.attr.MainMenuIconsListsTVSettings9, R.attr.MainMenuIconsListsTVSettings10, R.attr.MainMenuIconsListsTVSettings11, R.attr.MainMenuIconsListsTVSettings12 }); attsSize = atts.getIndexCount(); // //////////////////////////// // NO HBB // //////////////////////////// if (!ConfigHandler.HBB) { // TODO: Hbb Settings is not last one, this is not good and will not // work! // Hide HBB settings submenuSettingsTvSettings = new Integer[attsSize - 1]; int j = 0; for (int i = 0; i < attsSize; i++) { if (i != 5) { listID = atts.getResourceId(i, 0); submenuSettingsTvSettings[j] = listID; j++; } } } // //////////////////////////// // DEFAULT config // //////////////////////////// else { submenuSettingsTvSettings = new Integer[attsSize]; for (int i = 0; i < attsSize; i++) { listID = atts.getResourceId(i, 0); submenuSettingsTvSettings[i] = listID; } } // // ////////////////////////////////////////// // SECURITY SETTINGS // // ////////////////////////////////////////// atts = activity.getTheme().obtainStyledAttributes( new int[] { R.attr.MainMenuIconsListsSecuritySettings0, R.attr.MainMenuIconsListsSecuritySettings1, R.attr.MainMenuIconsListsSecuritySettings2 }); attsSize = atts.getIndexCount(); // ////////////////////////////////////////////// // NO TV FEATURES // ////////////////////////////////////////////// if (!ConfigHandler.TV_FEATURES) { submenuSettingsTvSecuritySettings = new Integer[attsSize - 1]; for (int i = 0; i < (attsSize - 1); i++) { listID = atts.getResourceId(i, 0); submenuSettingsTvSecuritySettings[i] = listID; } } // /////////////////////////////////////////////// // DEFAULT // /////////////////////////////////////////////// else { submenuSettingsTvSecuritySettings = new Integer[attsSize]; for (int i = 0; i < attsSize; i++) { listID = atts.getResourceId(i, 0); submenuSettingsTvSecuritySettings[i] = listID; } } atts.recycle(); } /** Check id resource and return next action */ public static Integer checkIdResourceAction(int id) { // Check image id and return corresponding action for (int i = 0; i < mainMenuIcons.length - 1; i++) { if (id == mainMenuIcons[i]) { return MainMenuContent.OPEN_DIALOG; } } for (int i = 1; i < submenuSettings.length; i++) { if (id == submenuSettings[i]) { return MainMenuContent.OPEN_DIALOG; } } for (int i = 0; i < submenuSettingsTvSettings.length; i++) { if (i != 1) { if (id == submenuSettingsTvSettings[i]) { return MainMenuContent.OPEN_DIALOG; } } } for (int i = 0; i < submenuSettingsTvSecuritySettings.length; i++) { if (id == submenuSettingsTvSecuritySettings[i]) { return MainMenuContent.OPEN_DIALOG; } } // //////////////////////////// // NO TV FEATURES // //////////////////////////// if (!ConfigHandler.TV_FEATURES) { // FIX indexes because there is no input options if (id == submenuSettingsTvSettings[1] || id == submenuSettings[0] || id == mainMenuIcons[4]) { return MainMenuContent.LOAD_SUBMENU; } } // //////////////////////////// // DEFAULT config // //////////////////////////// else { if (id == submenuSettingsTvSettings[1] || id == submenuSettings[0] || id == mainMenuIcons[5]) { return MainMenuContent.LOAD_SUBMENU; } } return -1; } /** TAG's for our views */ public static final int TAGA4TVButton = 0, TAGA4TVSpinner = 1, TAGA4TVEditText = 2, TAGA4TVTextView = 3, TAGA4TVCheckBox = 4, TAGA4TVProgressBar = 5, TAGA4TVRadioButton = 6, TAGA4TVButtonSwitch = 7; /** Check resource id and return dialog id */ public static int checkIdResourceDialog(int id) { switch (id) { // Main Menu level case R.drawable.content_list: { return OPEN_CONTENT_LIST; } case R.drawable.multimedia_icon: { return OPEN_MULTIMEDIA; } case R.drawable.applications: { return OPEN_APPLICATIONS; } case R.drawable.input_selection: { return OPEN_INPUT_SELECTIONS; } case R.drawable.google_play: { return OPEN_GOOGLE_PLAY; } // Settings level case R.drawable.network: { return OPEN_NETWORK_DIALOG; } case R.drawable.time_and_date: { return OPEN_TIME_AND_DATE; } case R.drawable.language_and_keyboard: { return OPEN_LANGUAGE_AND_KEYBOARD_DIALOG; } case R.drawable.input_devices: { return OPEN_INPUT_DEVICES_DIALOG; } case R.drawable.applications_settings: { return OPEN_APPLICATIONS_DIALOG; } case R.drawable.external_local_file_storage_settings: { return OPEN_EXTERNAL_AND_LOCAL_FILE_STORAGE_DIALOG; } case R.drawable.account_sync: { return OPEN_ACCOUNT_AND_SYNC_DIALOG; } case R.drawable.voice_input_output_settings: { return OPEN_VOICE_INPUT_DIALOG; } case R.drawable.main_menu_dlna_icon: { return OPEN_DLNA_SETTINGS; } case R.drawable.product_info: { return OPEN_PRODUCT_INFO; } case R.drawable.software_upgrade: { return OPEN_SOFTWARE_UPGRADE; } case R.drawable.energy_save: { return OPEN_ENERGY_SAVE; } case R.drawable.factory_reset: { return OPEN_FACTORY_RESET; } case R.drawable.timers: { return OPEN_TIMER; } // TV settings // Submenu tv settings case R.drawable.channel_installation: { return OPEN_CHANNEL_INSTALLATION_DIALOG; } case R.drawable.sound_settings: { return OPEN_SOUND_SETTINGS_DIALOG; } case R.drawable.picture_settings: { return OPEN_PICTURE_SETTINGS_DIALOG; } case R.drawable.subtitles: { return OPEN_SUBTITLE_DIALOG; } case R.drawable.hbbtv: { return OPEN_HBB_SETTINGS_DIALOG; } case R.drawable.teletext: { return OPEN_TELETEXT_SETTINGS_DIALOG; } case R.drawable.pvr_menu: { return OPEN_PVR_MENU; } // Submenu security settings case R.drawable.parential_guidance: { return OPEN_PARENTAL_GUIDANCE_DIALOG; } case R.drawable.password: { return OPEN_PASSWORD_DIALOG; } case R.drawable.program_blocking: { return OPEN_PROGRAM_BLOCKING_DIALOG; } default: return -1; } } /** Check resource id and return dialog id */ public static A4TVDialog getDialogFromMainMenuResource(int id, MainActivity activity) { switch (id) { // Settings level case R.drawable.network: { return activity.getDialogManager().getNetworkSettingsDialog(); } case R.drawable.time_and_date: { return activity.getDialogManager() .getTimeAndDateSettingsDialog(); } case R.drawable.language_and_keyboard: { return activity.getDialogManager() .getLanguageAndKeyboardDialog(); } case R.drawable.input_devices: { return activity.getDialogManager() .getInputDevicesSettingsDialog(); } case R.drawable.applications_settings: { return activity.getDialogManager() .getApplicationsManageDialog(); } case R.drawable.external_local_file_storage_settings: { return activity.getDialogManager() .getExternalAndLocalStorageDialog(); } case R.drawable.account_sync: { return activity.getDialogManager().getAccountsAndSyncDialog(); } case R.drawable.voice_input_output_settings: { return activity.getDialogManager().getVoiceInputDialog(); } case R.drawable.main_menu_dlna_icon: { return activity.getDialogManager().getDlnaSettingsDialog(); } case R.drawable.product_info: { return activity.getDialogManager().getProductInfoDialog(); } case R.drawable.software_upgrade: { return activity.getDialogManager().getSoftwareUpgradeDialog(); } case R.drawable.energy_save: { return activity.getDialogManager().getEnergySaveDialog(); } case R.drawable.factory_reset: { return activity.getDialogManager().getFactoryResetDialog(); } case R.drawable.timers: { return activity.getDialogManager().getTimersSettingsDialog(); } // TV settings // Submenu tv settings case R.drawable.channel_installation: { return activity.getDialogManager() .getChannelInstallationDialog(); } case R.drawable.sound_settings: { return activity.getDialogManager().getSoundSettingsDialog(); } case R.drawable.picture_settings: { return activity.getDialogManager().getPictureSettingsDialog(); } case R.drawable.subtitles: { return activity.getDialogManager().getSubtitleSettingsDialog(); } case R.drawable.hbbtv: { return activity.getDialogManager().getHbbSettingsDialog(); } case R.drawable.teletext: { return activity.getDialogManager().getTeletextSettingsDialog(); } case R.drawable.pvr_menu: { return activity.getDialogManager().getPVRMenuDialog(); } case R.drawable.screensaver: { return activity.getDialogManager() .getScreensaverSettingsDialog(); } case R.drawable.storemode: { return activity.getDialogManager().getStoreModeSettingsDialog(); } case R.drawable.ci_icon: { return activity.getDialogManager().getCISettingsDialog(); } case R.drawable.osd_selection_icon: { return activity.getDialogManager().getOSDSelectionDialog(); } case R.drawable.pip_icon: { return activity.getDialogManager().getPiPSettingsDialog(); } // Submenu security settings case R.drawable.parential_guidance: { return activity.getDialogManager().getParentalGuidanceDialog(); } case R.drawable.password: { return activity.getDialogManager().getPasswordSecurityDialog(); } default: return null; } } /** * Check id resource and return next or check current state and return * previous submenu that need to be loaded * * @param id * Resource id for forward direction * @param next_previous * next or previous sub menu content ( true - next false-previous ) * @return id of menu that will be loaded */ public static int checkIdResourceNextSubmenu(int id, boolean next_previous) { // Direction = next if (next_previous) { // Check id switch (id) { case R.drawable.settings_icon: { return MainMenuContent.SETTINGS; } case R.drawable.tv_settings: { return MainMenuContent.TV_SETTINGS; } case R.drawable.security: { return MainMenuContent.SECURITY_SETTINGS; } default: return -1; } } // Direction = previous else { // Check current state switch (currentState) { case MainMenuContent.MAIN_MENU: { submenuRootResId = 0; return MainMenuContent.MAIN_MENU; } case MainMenuContent.SETTINGS: { submenuRootResId = 0; return MainMenuContent.MAIN_MENU; } case MainMenuContent.TV_SETTINGS: { submenuRootResId = R.drawable.settings_icon; return MainMenuContent.SETTINGS; } case MainMenuContent.SECURITY_SETTINGS: { submenuRootResId = R.drawable.tv_settings; return MainMenuContent.TV_SETTINGS; } default: return -1; } } } }