[Android] Add the capability to dynamically enable and disable the input overlay during emulation.

This commit is contained in:
Lioncash 2013-10-25 23:10:17 -04:00
parent d9be95ed9e
commit 77eb9ce725
4 changed files with 70 additions and 10 deletions

View File

@ -1,4 +1,12 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Enable/Disabe Input Overlay -->
<item
android:id="@+id/enableInputOverlay"
android:showAsAction="ifRoom"
android:title="@string/disable_input_overlay"/>
<!-- Save State Slots -->
<item <item
android:id="@+id/saveStateRoot" android:id="@+id/saveStateRoot"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
@ -21,6 +29,7 @@
</menu> </menu>
</item> </item>
<!-- Load State Slots -->
<item <item
android:id="@+id/loadStateRoot" android:id="@+id/loadStateRoot"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
@ -45,7 +54,7 @@
<item <item
android:id="@+id/exitEmulation" android:id="@+id/exitEmulation"
android:showAsAction="always" android:showAsAction="ifRoom"
android:title="@string/overlay_exit_emulation"> android:title="@string/overlay_exit_emulation">
</item> </item>
</menu> </menu>

View File

@ -29,6 +29,8 @@
<string name="file_clicked">クリックされたファイル: %1$s</string> <string name="file_clicked">クリックされたファイル: %1$s</string>
<!-- Emulation Window Overlay --> <!-- Emulation Window Overlay -->
<string name="enable_input_overlay">入力オーバーレイを有効</string>
<string name="disable_input_overlay">入力オーバーレイを無効</string>
<string name="overlay_savestate">ステートセーブ</string> <string name="overlay_savestate">ステートセーブ</string>
<string name="overlay_loadstate">ステートロード</string> <string name="overlay_loadstate">ステートロード</string>
<string name="overlay_exit_emulation">終了</string> <string name="overlay_exit_emulation">終了</string>

View File

@ -29,6 +29,8 @@
<string name="file_clicked">File clicked: %1$s</string> <string name="file_clicked">File clicked: %1$s</string>
<!-- Emulation Overlay --> <!-- Emulation Overlay -->
<string name="enable_input_overlay">Enable Input Overlay</string>
<string name="disable_input_overlay">Disable Input Overlay</string>
<string name="overlay_savestate">Save State</string> <string name="overlay_savestate">Save State</string>
<string name="overlay_loadstate">Load State</string> <string name="overlay_loadstate">Load State</string>
<string name="overlay_exit_emulation">Exit</string> <string name="overlay_exit_emulation">Exit</string>

View File

@ -36,6 +36,7 @@ public final class EmulationActivity extends Activity
private boolean IsActionBarHidden = false; private boolean IsActionBarHidden = false;
private float screenWidth; private float screenWidth;
private float screenHeight; private float screenHeight;
private SharedPreferences sharedPrefs;
@Override @Override
public void onCreate(Bundle savedInstanceState) public void onCreate(Bundle savedInstanceState)
@ -60,29 +61,36 @@ public final class EmulationActivity extends Activity
getActionBar().setBackgroundDrawable(actionBarBackground); getActionBar().setBackgroundDrawable(actionBarBackground);
// Set the native rendering screen width/height. // Set the native rendering screen width/height.
// Also get the intent passed from the GameList when the game //
// was selected. This is so the path of the game can be retrieved
// and set on the native side of the code so the emulator can actually
// load the game.
Intent gameToEmulate = getIntent();
// Due to a bug in Adreno, it renders the screen rotated 90 degrees when using OpenGL // Due to a bug in Adreno, it renders the screen rotated 90 degrees when using OpenGL
// Flip the width and height when on Adreno to work around this. // Flip the width and height when on Adreno to work around this.
// Mali isn't affected by this bug. // Mali isn't affected by this bug.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
if (prefs.getString("gpuPref", "Software Rendering").equals("OGL") if (sharedPrefs.getString("gpuPref", "Software Rendering").equals("OGL")
&& VideoSettingsFragment.SupportsGLES3() && VideoSettingsFragment.SupportsGLES3()
&& VideoSettingsFragment.m_GLVendor != null && VideoSettingsFragment.m_GLVendor != null
&& VideoSettingsFragment.m_GLVendor.equals("Qualcomm")) && VideoSettingsFragment.m_GLVendor.equals("Qualcomm"))
NativeLibrary.SetDimensions((int)screenHeight, (int)screenWidth); NativeLibrary.SetDimensions((int)screenHeight, (int)screenWidth);
else else
NativeLibrary.SetDimensions((int)screenWidth, (int)screenHeight); NativeLibrary.SetDimensions((int)screenWidth, (int)screenHeight);
// Get the intent passed from the GameList when the game
// was selected. This is so the path of the game can be retrieved
// and set on the native side of the code so the emulator can actually
// load the game.
Intent gameToEmulate = getIntent();
NativeLibrary.SetFilename(gameToEmulate.getStringExtra("SelectedGame")); NativeLibrary.SetFilename(gameToEmulate.getStringExtra("SelectedGame"));
Running = true; Running = true;
// Set the emulation window. // Set the emulation window.
setContentView(R.layout.emulation_view); setContentView(R.layout.emulation_view);
// If the input overlay was previously disabled, then don't show it.
if (!sharedPrefs.getBoolean("showInputOverlay", true))
{
findViewById(R.id.emulationControlOverlay).setVisibility(View.INVISIBLE);
}
// Hide the action bar by default so it doesn't get in the way. // Hide the action bar by default so it doesn't get in the way.
getActionBar().hide(); getActionBar().hide();
IsActionBarHidden = true; IsActionBarHidden = true;
@ -168,11 +176,50 @@ public final class EmulationActivity extends Activity
return true; return true;
} }
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
// Determine which string the "Enable Input Overlay" menu item should have
// depending on its visibility at the time of preparing the options menu.
if (!sharedPrefs.getBoolean("showInputOverlay", true))
{
menu.findItem(R.id.enableInputOverlay).setTitle(R.string.enable_input_overlay);
}
else
{
menu.findItem(R.id.enableInputOverlay).setTitle(R.string.disable_input_overlay);
}
return true;
}
@Override @Override
public boolean onMenuItemSelected(int itemId, MenuItem item) public boolean onMenuItemSelected(int itemId, MenuItem item)
{ {
switch(item.getItemId()) switch(item.getItemId())
{ {
// Enable/Disable input overlay.
case R.id.enableInputOverlay:
{
View overlay = findViewById(R.id.emulationControlOverlay);
// Show the overlay
if (item.getTitle().equals(getString(R.string.enable_input_overlay)))
{
overlay.setVisibility(View.VISIBLE);
item.setTitle(R.string.disable_input_overlay);
sharedPrefs.edit().putBoolean("showInputOverlay", true).commit();
}
else // Hide the overlay
{
overlay.setVisibility(View.INVISIBLE);
item.setTitle(R.string.enable_input_overlay);
sharedPrefs.edit().putBoolean("showInputOverlay", false).commit();
}
return true;
}
// Save state slots // Save state slots
case R.id.saveSlot1: case R.id.saveSlot1:
NativeLibrary.SaveState(0); NativeLibrary.SaveState(0);
@ -194,7 +241,7 @@ public final class EmulationActivity extends Activity
NativeLibrary.SaveState(4); NativeLibrary.SaveState(4);
return true; return true;
// Load state slot // Load state slots
case R.id.loadSlot1: case R.id.loadSlot1:
NativeLibrary.LoadState(0); NativeLibrary.LoadState(0);
return true; return true;