summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-04-07 18:02:35 +0200
committerJosJuice <josjuice@gmail.com>2020-09-08 16:27:09 +0200
commitcf51642c17878ddeebee4397b03b46f10871bf47 (patch)
treed69e7c6774ca0b52b407146db36160412168a395 /Source/Android
parent67761c7d313193d88d5262483aaeda5e47f0980f (diff)
Android: Use Back to open the emulation menu on all devices
https://bugs.dolphin-emu.org/issues/12029 We currently have one way of opening the menu on touch screen devices (swiping down from the top of the screen to bring up the action bar and selecting the menu in the action bar), and another way of opening the menu on Android TV (pressing Back). However, some devices that claim to support touch (or don't support leanback? Dolphin currently conflates the two) don't actually let you swipe down from the top of the screen in the way that Dolphin expects, notably Chromebooks. There are also some phones where you can swipe down from the top of the screen but this for some reason doesn't lead to the action bar becoming visible, though we are getting less reports about this nowadays than in the past. This change makes us use the Back method on all devices, since it should work on all devices with no significant drawbacks. Unfortunately, we not only have two different ways of triggering the menu but actually two entirely different menus, with the non-touch menu not implementing options that only are revelant when using a touch screen. A later commit will add the missing features to the menu that we now use on all devices.
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java94
-rw-r--r--Source/Android/app/src/main/res/layout-television/activity_emulation.xml38
-rw-r--r--Source/Android/app/src/main/res/layout/activity_emulation.xml27
-rw-r--r--Source/Android/app/src/main/res/values/strings.xml2
-rw-r--r--Source/Android/app/src/main/res/values/styles.xml16
5 files changed, 54 insertions, 123 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
index 090e22a1bb..3ec233a117 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
@@ -6,7 +6,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
-import android.os.Handler;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.SparseIntArray;
@@ -62,7 +61,6 @@ public final class EmulationActivity extends AppCompatActivity
private static final String BACKSTACK_NAME_SUBMENU = "submenu";
public static final int REQUEST_CHANGE_DISC = 1;
- private View mDecorView;
private EmulationFragment mEmulationFragment;
private SharedPreferences mPreferences;
@@ -85,7 +83,6 @@ public final class EmulationActivity extends AppCompatActivity
private int mPlatform;
private String[] mPaths;
private static boolean sUserPausedEmulation;
- private boolean backPressedOnce = false;
public static final String EXTRA_SELECTED_GAMES = "SelectedGames";
public static final String EXTRA_SELECTED_TITLE = "SelectedTitle";
@@ -317,33 +314,10 @@ public final class EmulationActivity extends AppCompatActivity
mDeviceHasTouchScreen = getPackageManager().hasSystemFeature("android.hardware.touchscreen");
mMotionListener = new MotionListener(this);
- int themeId;
- if (mDeviceHasTouchScreen)
- {
- themeId = R.style.DolphinEmulationBase;
-
- // Get a handle to the Window containing the UI.
- mDecorView = getWindow().getDecorView();
- mDecorView.setOnSystemUiVisibilityChangeListener(visibility ->
- {
- if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
- {
- // Go back to immersive fullscreen mode in 3s
- Handler handler = new Handler(getMainLooper());
- handler.postDelayed(this::enableFullscreenImmersive, 3000 /* 3s */);
- }
- });
- // Set these options now so that the SurfaceView the game renders into is the right size.
- enableFullscreenImmersive();
- Toast.makeText(this, getString(R.string.emulation_touch_button_help), Toast.LENGTH_LONG)
- .show();
- }
- else
- {
- themeId = R.style.DolphinEmulationTvBase;
- }
+ // Set these options now so that the SurfaceView the game renders into is the right size.
+ enableFullscreenImmersive();
- setTheme(themeId);
+ Toast.makeText(this, getString(R.string.emulation_menu_help), Toast.LENGTH_LONG).show();
Rumble.initRumble(this);
@@ -360,10 +334,7 @@ public final class EmulationActivity extends AppCompatActivity
.commit();
}
- if (mDeviceHasTouchScreen)
- {
- setTitle(mSelectedTitle);
- }
+ setTitle(mSelectedTitle);
}
@Override
@@ -391,9 +362,19 @@ public final class EmulationActivity extends AppCompatActivity
}
@Override
+ public void onWindowFocusChanged(boolean hasFocus)
+ {
+ if (hasFocus)
+ {
+ enableFullscreenImmersive();
+ }
+ }
+
+ @Override
protected void onResume()
{
super.onResume();
+
if (!sIsGameCubeGame && mPreferences.getInt("motionControlsEnabled", 0) != 2)
mMotionListener.enable();
}
@@ -414,28 +395,11 @@ public final class EmulationActivity extends AppCompatActivity
@Override
public void onBackPressed()
{
- if (!mDeviceHasTouchScreen)
+ boolean popResult = getSupportFragmentManager().popBackStackImmediate(
+ BACKSTACK_NAME_SUBMENU, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ if (!popResult)
{
- boolean popResult = getSupportFragmentManager().popBackStackImmediate(
- BACKSTACK_NAME_SUBMENU, FragmentManager.POP_BACK_STACK_INCLUSIVE);
- if (!popResult)
- {
- toggleMenu();
- }
- }
- else
- {
- if (backPressedOnce)
- {
- mEmulationFragment.stopEmulation();
- finish();
- }
- else
- {
- backPressedOnce = true;
- Toast.makeText(this, "Press back again to exit", Toast.LENGTH_LONG).show();
- new Handler().postDelayed(() -> backPressedOnce = false, 3000);
- }
+ toggleMenu();
}
}
@@ -459,14 +423,13 @@ public final class EmulationActivity extends AppCompatActivity
private void enableFullscreenImmersive()
{
- // It would be nice to use IMMERSIVE_STICKY, but that doesn't show the toolbar.
- mDecorView.setSystemUiVisibility(
+ getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_FULLSCREEN |
- View.SYSTEM_UI_FLAG_IMMERSIVE);
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
private void updateOrientation()
@@ -631,19 +594,12 @@ public final class EmulationActivity extends AppCompatActivity
NativeLibrary.LoadState(9);
return;
- // TV Menu only
case MENU_ACTION_SAVE_ROOT:
- if (!mDeviceHasTouchScreen)
- {
- showSubMenu(SaveLoadStateFragment.SaveOrLoad.SAVE);
- }
+ showSubMenu(SaveLoadStateFragment.SaveOrLoad.SAVE);
return;
case MENU_ACTION_LOAD_ROOT:
- if (!mDeviceHasTouchScreen)
- {
- showSubMenu(SaveLoadStateFragment.SaveOrLoad.LOAD);
- }
+ showSubMenu(SaveLoadStateFragment.SaveOrLoad.LOAD);
return;
// Save state slots
@@ -718,9 +674,9 @@ public final class EmulationActivity extends AppCompatActivity
return;
case MENU_ACTION_EXIT:
- // ATV menu is built using a fragment, this will pop that fragment before emulation ends.
- if (TvUtil.isLeanback(getApplicationContext()))
- toggleMenu(); // Hide the menu (it will be showing since we just clicked it)
+ // Hide the menu (it will be showing since we just clicked it)
+ toggleMenu();
+
mEmulationFragment.stopEmulation();
finish();
return;
diff --git a/Source/Android/app/src/main/res/layout-television/activity_emulation.xml b/Source/Android/app/src/main/res/layout-television/activity_emulation.xml
deleted file mode 100644
index 5e516d04ad..0000000000
--- a/Source/Android/app/src/main/res/layout-television/activity_emulation.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:keepScreenOn="true"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/frame_content">
-
- <FrameLayout
- android:id="@+id/frame_emulation_fragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
- <org.dolphinemu.dolphinemu.ui.NVidiaShieldWorkaroundView
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:baselineAligned="false">
-
- <FrameLayout
- android:id="@+id/frame_menu"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight=".25"
- tools:layout="@layout/fragment_ingame_menu"/>
-
- <FrameLayout
- android:id="@+id/frame_submenu"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight=".75"/>
-
- </LinearLayout>
-
-</FrameLayout>
diff --git a/Source/Android/app/src/main/res/layout/activity_emulation.xml b/Source/Android/app/src/main/res/layout/activity_emulation.xml
index 2ebea4fc34..5e516d04ad 100644
--- a/Source/Android/app/src/main/res/layout/activity_emulation.xml
+++ b/Source/Android/app/src/main/res/layout/activity_emulation.xml
@@ -1,6 +1,8 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:keepScreenOn="true"
+ xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frame_content">
<FrameLayout
@@ -8,4 +10,29 @@
android:layout_width="match_parent"
android:layout_height="match_parent"/>
+ <org.dolphinemu.dolphinemu.ui.NVidiaShieldWorkaroundView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:baselineAligned="false">
+
+ <FrameLayout
+ android:id="@+id/frame_menu"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight=".25"
+ tools:layout="@layout/fragment_ingame_menu"/>
+
+ <FrameLayout
+ android:id="@+id/frame_submenu"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight=".75"/>
+
+ </LinearLayout>
+
</FrameLayout>
diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml
index 1ced8c6969..033f279b4b 100644
--- a/Source/Android/app/src/main/res/values/strings.xml
+++ b/Source/Android/app/src/main/res/values/strings.xml
@@ -355,7 +355,7 @@
<string name="emulation_control_joystick_rel_center">Relative Stick Center</string>
<string name="emulation_control_rumble">Rumble</string>
<string name="emulation_choose_controller">Choose Controller</string>
- <string name="emulation_touch_button_help">Swipe down from the top of the screen to access the menu.</string>
+ <string name="emulation_menu_help">Press Back to access the menu.</string>
<string name="emulation_touch_overlay_reset">Reset Overlay</string>
<string name="emulation_ir_group">Touch IR Pointer</string>
<string name="emulation_ir_sensitivity">IR Sensitivity</string>
diff --git a/Source/Android/app/src/main/res/values/styles.xml b/Source/Android/app/src/main/res/values/styles.xml
index 8a292d4113..5bb491c418 100644
--- a/Source/Android/app/src/main/res/values/styles.xml
+++ b/Source/Android/app/src/main/res/values/styles.xml
@@ -29,21 +29,7 @@
<style name="DolphinDialogBase" parent="Theme.AppCompat.DayNight.Dialog.Alert" />
- <style name="DolphinEmulationBase" parent="Theme.AppCompat.DayNight.DarkActionBar">
- <item name="colorPrimary">@color/dolphin_blue</item>
- <item name="colorPrimaryDark">@color/dolphin_blue_dark</item>
- <item name="colorAccent">@color/dolphin_purple</item>
- <item name="android:windowTranslucentNavigation">true</item>
-
- <item name="android:windowBackground">@android:color/black</item>
-
- <!-- Enable window content transitions -->
- <item name="android:windowContentTransitions">true</item>
- <item name="android:windowAllowEnterTransitionOverlap">true</item>
- <item name="android:windowAllowReturnTransitionOverlap">true</item>
- </style>
-
- <style name="DolphinEmulationTvBase" parent="Theme.AppCompat.DayNight.NoActionBar">
+ <style name="DolphinEmulationBase" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">@color/dolphin_blue</item>
<item name="colorPrimaryDark">@color/dolphin_blue_dark</item>
<item name="colorAccent">@color/dolphin_purple</item>