Android: Show the in-game menu when back button is pushed.

This commit is contained in:
sigmabeta 2015-06-07 23:11:34 -04:00
parent 5c7caf1f22
commit a97e9addf0
1 changed files with 27 additions and 2 deletions

View File

@ -25,6 +25,9 @@ public final class EmulationActivity extends Activity
{ {
private View mDecorView; private View mDecorView;
private boolean mDeviceHasTouchScreen;
private boolean mSystemUiVisible;
/** /**
* Handlers are a way to pass a message to an Activity telling it to do something * Handlers are a way to pass a message to an Activity telling it to do something
* on the UI thread. This Handler responds to any message, even blank ones, by * on the UI thread. This Handler responds to any message, even blank ones, by
@ -44,6 +47,8 @@ public final class EmulationActivity extends Activity
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mDeviceHasTouchScreen = getPackageManager().hasSystemFeature("android.hardware.touchscreen");
// Get a handle to the Window containing the UI. // Get a handle to the Window containing the UI.
mDecorView = getWindow().getDecorView(); mDecorView = getWindow().getDecorView();
@ -59,9 +64,9 @@ public final class EmulationActivity extends Activity
@Override @Override
public void onSystemUiVisibilityChange(int flags) public void onSystemUiVisibilityChange(int flags)
{ {
boolean visible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; mSystemUiVisible = (flags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
if (visible) if (mSystemUiVisible)
{ {
getActionBar().show(); getActionBar().show();
hideSystemUiAfterDelay(); hideSystemUiAfterDelay();
@ -117,6 +122,20 @@ public final class EmulationActivity extends Activity
} }
} }
@Override
public void onBackPressed()
{
if (!mDeviceHasTouchScreen && !mSystemUiVisible)
{
showSystemUI();
}
else
{
// Let the system handle it; i.e. quit the activity TODO or show "are you sure?" dialog.
super.onBackPressed();
}
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) public boolean onCreateOptionsMenu(Menu menu)
{ {
@ -275,6 +294,8 @@ public final class EmulationActivity extends Activity
private void hideSystemUI() private void hideSystemUI()
{ {
mSystemUiVisible = false;
mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
@ -285,8 +306,12 @@ public final class EmulationActivity extends Activity
private void showSystemUI() private void showSystemUI()
{ {
mSystemUiVisible = true;
mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
hideSystemUiAfterDelay();
} }
} }