package yuku.iconcontextmenu; import yuku.androidsdk.com.android.internal.view.menu.MenuBuilder; import android.app.AlertDialog; import android.content.*; import android.view.*; public class IconContextMenu { public interface IconContextItemSelectedListener { void onIconContextItemSelected(MenuItem item, Object info); } private final AlertDialog dialog; private final Menu menu; private IconContextItemSelectedListener iconContextItemSelectedListener; private Object info; public IconContextMenu(Context context, int menuId) { this(context, newMenu(context, menuId)); } public static Menu newMenu(Context context, int menuId) { Menu menu = new MenuBuilder(context); new MenuInflater(context).inflate(menuId, menu); return menu; } public IconContextMenu(Context context, Menu menu) { this.menu = menu; final IconContextMenuAdapter adapter = new IconContextMenuAdapter(context, menu); this.dialog = new AlertDialog.Builder(context) .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (iconContextItemSelectedListener != null) { iconContextItemSelectedListener.onIconContextItemSelected(adapter.getItem(which), info); } } }) .setInverseBackgroundForced(true) .create(); } public void setInfo(Object info) { this.info = info; } public Object getInfo() { return info; } public Menu getMenu() { return menu; } public void setOnIconContextItemSelectedListener(IconContextItemSelectedListener iconContextItemSelectedListener) { this.iconContextItemSelectedListener = iconContextItemSelectedListener; } public void setOnCancelListener(DialogInterface.OnCancelListener onCancelListener) { dialog.setOnCancelListener(onCancelListener); } public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { dialog.setOnDismissListener(onDismissListener); } public void setTitle(CharSequence title) { dialog.setTitle(title); } public void setTitle(int titleId) { dialog.setTitle(titleId); } public void show() { dialog.show(); } public void dismiss() { dialog.dismiss(); } public void cancel() { dialog.cancel(); } public AlertDialog getDialog() { return dialog; } }