package org.emdev.ui.actions; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import java.io.Serializable; public class ActionMenuHelper { public static final String MENU_ITEM_SOURCE = "source"; public static final String ACTIVITY_RESULT_DATA = "activityResultData"; public static final String ACTIVITY_RESULT_CODE = "activityResultCode"; public static final String ACTIVITY_RESULT_ACTION_ID = "activityResultActionId"; public static void setActionParameters(final MenuItem item, final ActionEx action) { final Intent intent = item.getIntent(); final Bundle extras = intent != null ? intent.getExtras() : null; if (extras != null) { for (final String key : extras.keySet()) { final ExtraWrapper w = (ExtraWrapper) extras.getSerializable(key); action.putValue(key, w != null ? w.data : null); } } } public static void setMenuSource(final IActionController<?> c, final Menu menu, final Object source) { for (int i = 0, n = menu.size(); i < n; i++) { final MenuItem item = menu.getItem(i); final SubMenu subMenu = item.getSubMenu(); if (subMenu != null) { setMenuSource(c, subMenu, source); } else { setMenuItemSource(c, item, source); } } } public static void setMenuItemSource(final IActionController<?> c, final MenuItem item, final Object source) { final int itemId = item.getItemId(); c.getOrCreateAction(itemId).putValue(MENU_ITEM_SOURCE, source); } public static void setMenuItemExtra(final Menu menu, final int itemId, final String name, final Object data) { final MenuItem item = menu.findItem(itemId); if (item != null) { setMenuItemExtra(item, name, data); } } public static void setMenuItemExtra(final MenuItem item, final String name, final Object data) { Intent intent = item.getIntent(); if (intent == null) { intent = new Intent(); item.setIntent(intent); } intent.putExtra(name, new ExtraWrapper(data)); } public static void setMenuParameters(final IActionController<?> c, final Menu menu, final IActionParameter... parameters) { for (int i = 0, n = menu.size(); i < n; i++) { final MenuItem item = menu.getItem(i); final SubMenu subMenu = item.getSubMenu(); if (subMenu != null) { setMenuParameters(c, subMenu, parameters); } else { final int itemId = item.getItemId(); final ActionEx action = c.getOrCreateAction(itemId); for (final IActionParameter p : parameters) { action.addParameter(p); } } } } public static void setMenuItemVisible(final Menu menu, final boolean visible, final int viewId) { final MenuItem v = menu.findItem(viewId); if (v != null) { v.setVisible(visible); } } public static void setMenuItemEnabled(final Menu menu, final boolean enabled, final int viewId, final int enabledResId, final int disabledResId) { final MenuItem v = menu.findItem(viewId); if (v != null) { v.setIcon(enabled ? enabledResId : disabledResId); v.setEnabled(enabled); } } public static void setMenuItemEnabled(final Menu menu, final boolean enabled, final int viewId) { final MenuItem v = menu.findItem(viewId); if (v != null) { v.setEnabled(enabled); } } public static void setMenuItemChecked(final Menu menu, final boolean checked, final int viewId) { final MenuItem v = menu.findItem(viewId); if (v != null) { v.setChecked(checked); } } public static void setMenuItemChecked(final Menu menu, final boolean checked, final int viewId, final int checkedResId, final int uncheckedResId) { final MenuItem v = menu.findItem(viewId); if (v != null) { v.setChecked(checked); v.setIcon(checked ? checkedResId : uncheckedResId); } } private static final class ExtraWrapper implements Serializable { /** * Serial version UID */ private static final long serialVersionUID = -5109930164496309305L; public Object data; private ExtraWrapper(final Object data) { super(); this.data = data; } } }