From 0d014d7903da8f1126e72a41e6751763a526677c Mon Sep 17 00:00:00 2001 From: Themaister Date: Sun, 27 Jan 2013 11:51:51 +0100 Subject: [PATCH 1/4] Use older PreferenceActivity. Builds with SDK version 9 (2.3). --- android/phoenix/AndroidManifest.xml | 2 +- .../retroarch/browser/SettingsActivity.java | 21 ++++--------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/android/phoenix/AndroidManifest.xml b/android/phoenix/AndroidManifest.xml index 114980f263..f83161d23b 100644 --- a/android/phoenix/AndroidManifest.xml +++ b/android/phoenix/AndroidManifest.xml @@ -4,7 +4,7 @@ android:versionName="0.9.8" > diff --git a/android/phoenix/src/org/retroarch/browser/SettingsActivity.java b/android/phoenix/src/org/retroarch/browser/SettingsActivity.java index 770e1dd430..d533a792d5 100644 --- a/android/phoenix/src/org/retroarch/browser/SettingsActivity.java +++ b/android/phoenix/src/org/retroarch/browser/SettingsActivity.java @@ -1,29 +1,16 @@ package org.retroarch.browser; import org.retroarch.R; - -import android.app.Activity; import android.os.Bundle; -import android.preference.PreferenceFragment; +import android.preference.PreferenceActivity; import android.preference.PreferenceManager; -public class SettingsActivity extends Activity { +public class SettingsActivity extends PreferenceActivity { + @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getFragmentManager().beginTransaction(). - replace(android.R.id.content, new SettingsFragment()).commit(); + addPreferencesFromResource(R.xml.prefs); PreferenceManager.setDefaultValues(this, R.xml.prefs, false); } - - public static class SettingsFragment extends PreferenceFragment { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Load the preferences from an XML resource - addPreferencesFromResource(R.xml.prefs); - } - } } From 80ecc100558c99f11d6d1e30e955cd0ccd446741 Mon Sep 17 00:00:00 2001 From: ToadKing Date: Tue, 29 Jan 2013 21:47:14 -0500 Subject: [PATCH 2/4] Add PopupMenu replacement for 2.3 --- .../src/org/retroarch/browser/RetroArch.java | 52 +++++++++++++++---- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index b8ea8dd224..1d9171cb2c 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -6,6 +6,7 @@ import java.io.*; import android.content.*; import android.content.res.AssetManager; +import android.annotation.TargetApi; import android.app.*; import android.net.Uri; import android.os.*; @@ -14,6 +15,7 @@ import android.provider.Settings; import android.widget.*; import android.util.Log; import android.view.*; +import android.view.ContextMenu.ContextMenuInfo; import android.view.inputmethod.*; import android.graphics.drawable.*; @@ -52,7 +54,7 @@ class ModuleWrapper implements IconAdapterItem { } public class RetroArch extends Activity implements - AdapterView.OnItemClickListener, PopupMenu.OnMenuItemClickListener { + AdapterView.OnItemClickListener { private IconAdapter adapter; static private final int ACTIVITY_LOAD_ROM = 0; static private String libretro_path; @@ -230,6 +232,11 @@ public class RetroArch extends Activity implements } } } + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) + { + this.registerForContextMenu(findViewById(android.R.id.content)); + } } @Override @@ -380,15 +387,38 @@ public class RetroArch extends Activity implements getMenuInflater().inflate(R.menu.directory_list, aMenu); return true; } - - public void showPopup(View v) { - PopupMenu menu = new PopupMenu(this, v); - MenuInflater inflater = menu.getMenuInflater(); - inflater.inflate(R.menu.context_menu, menu.getMenu()); - menu.setOnMenuItemClickListener(this); - menu.show(); - } + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public void showPopup(View v) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) + { + PopupMenu menu = new PopupMenu(this, v); + MenuInflater inflater = menu.getMenuInflater(); + inflater.inflate(R.menu.context_menu, menu.getMenu()); + menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() + { + @Override + public boolean onMenuItemClick(MenuItem item) { + return onContextItemSelected(item); + } + + }); + menu.show(); + } + else + { + this.openContextMenu(findViewById(android.R.id.content)); + } + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.context_menu, menu); + } + @Override public boolean onOptionsItemSelected(MenuItem aItem) { switch (aItem.getItemId()) { @@ -401,9 +431,9 @@ public class RetroArch extends Activity implements return super.onOptionsItemSelected(aItem); } } - + @Override - public boolean onMenuItemClick(MenuItem item) { + public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.input_method_select: InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); From 5265d7aca412209140c35491b57e783bd261b698 Mon Sep 17 00:00:00 2001 From: ToadKing Date: Tue, 29 Jan 2013 23:21:52 -0500 Subject: [PATCH 3/4] (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(); + } + } +} From b25e67c7c8db7887a82eb152748cbd7f9df837cd Mon Sep 17 00:00:00 2001 From: ToadKing Date: Tue, 29 Jan 2013 23:24:23 -0500 Subject: [PATCH 4/4] (Android) move @TargetApi to correct location --- android/phoenix/src/org/retroarch/browser/RetroArch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/phoenix/src/org/retroarch/browser/RetroArch.java b/android/phoenix/src/org/retroarch/browser/RetroArch.java index 93059517e9..bf55d8f083 100644 --- a/android/phoenix/src/org/retroarch/browser/RetroArch.java +++ b/android/phoenix/src/org/retroarch/browser/RetroArch.java @@ -388,7 +388,6 @@ public class RetroArch extends Activity implements return true; } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void showPopup(View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { @@ -479,6 +478,7 @@ abstract class LazyPopupMenu { } } +@TargetApi(Build.VERSION_CODES.HONEYCOMB) class HoneycombPopupMenu extends LazyPopupMenu { private PopupMenu instance; HoneycombPopupMenu.OnMenuItemClickListener listen;