From 5265d7aca412209140c35491b57e783bd261b698 Mon Sep 17 00:00:00 2001 From: ToadKing Date: Tue, 29 Jan 2013 23:21:52 -0500 Subject: [PATCH] (Android) abstract PopupMenu to make Dalvik happy on 2.3 --- .../src/org/retroarch/browser/RetroArch.java | 105 +++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index 1d9171cb2c..93059517e9 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -392,10 +392,10 @@ public class RetroArch extends Activity implements public void showPopup(View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - PopupMenu menu = new PopupMenu(this, v); + PopupMenuAbstract menu = new PopupMenuAbstract(this, v); MenuInflater inflater = menu.getMenuInflater(); inflater.inflate(R.menu.context_menu, menu.getMenu()); - menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() + menu.setOnMenuItemClickListener(new PopupMenuAbstract.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -468,3 +468,104 @@ public class RetroArch extends Activity implements } } } + +abstract class LazyPopupMenu { + public abstract Menu getMenu(); + public abstract MenuInflater getMenuInflater(); + public abstract void setOnMenuItemClickListener(LazyPopupMenu.OnMenuItemClickListener listener); + public abstract void show(); + public interface OnMenuItemClickListener { + public abstract boolean onMenuItemClick(MenuItem item); + } +} + +class HoneycombPopupMenu extends LazyPopupMenu { + private PopupMenu instance; + HoneycombPopupMenu.OnMenuItemClickListener listen; + + public HoneycombPopupMenu(Context context, View anchor) + { + instance = new PopupMenu(context, anchor); + } + + @Override + public void setOnMenuItemClickListener(HoneycombPopupMenu.OnMenuItemClickListener listener) + { + listen = listener; + instance.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + return listen.onMenuItemClick(item); + } + + }); + } + + @Override + public Menu getMenu() { + return instance.getMenu(); + } + + @Override + public MenuInflater getMenuInflater() { + return instance.getMenuInflater(); + } + + @Override + public void show() { + instance.show(); + } +} + +class PopupMenuAbstract extends LazyPopupMenu +{ + private LazyPopupMenu lazy; + + public PopupMenuAbstract(Context context, View anchor) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy = new HoneycombPopupMenu(context, anchor); + } + } + + @Override + public Menu getMenu() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + return lazy.getMenu(); + } + else + { + return null; + } + } + + @Override + public MenuInflater getMenuInflater() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + return lazy.getMenuInflater(); + } + else + { + return null; + } + } + + @Override + public void setOnMenuItemClickListener(PopupMenuAbstract.OnMenuItemClickListener listener) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy.setOnMenuItemClickListener(listener); + } + } + + @Override + public void show() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + lazy.show(); + } + } +}