summaryrefslogtreecommitdiff
path: root/Source/Android/app
diff options
context:
space:
mode:
authorAnthony <Helios747@users.noreply.github.com>2019-11-27 15:40:43 -0800
committerGitHub <noreply@github.com>2019-11-27 15:40:43 -0800
commit155016531fb970f45d46a97b4397d9990e2b494e (patch)
treec2cb83ae37c26ef4ebaae0dea9172eb4291084ec /Source/Android/app
parent34a1df1c68ba76cdc5aea2dfabb68e1850dd9662 (diff)
parent2d4a3f4597f14b2563fac7acf080b91fa4bac5e8 (diff)
Merge pull request #8439 from JosJuice/android-native-motion-controls
Android: Native motion controls
Diffstat (limited to 'Source/Android/app')
-rw-r--r--Source/Android/app/src/main/AndroidManifest.xml6
-rw-r--r--Source/Android/app/src/main/assets/WiimoteNew.ini56
-rw-r--r--Source/Android/app/src/main/assets/WiimoteProfile.ini14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java15
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java119
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java8
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java1
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java126
-rw-r--r--Source/Android/app/src/main/res/menu/menu_emulation.xml5
-rw-r--r--Source/Android/app/src/main/res/menu/menu_emulation_wii.xml9
-rw-r--r--Source/Android/app/src/main/res/values/arrays.xml17
-rw-r--r--Source/Android/app/src/main/res/values/strings.xml2
14 files changed, 355 insertions, 46 deletions
diff --git a/Source/Android/app/src/main/AndroidManifest.xml b/Source/Android/app/src/main/AndroidManifest.xml
index 0ba4bc2b51..f9554dbc73 100644
--- a/Source/Android/app/src/main/AndroidManifest.xml
+++ b/Source/Android/app/src/main/AndroidManifest.xml
@@ -5,6 +5,12 @@
android:name="android.hardware.touchscreen"
android:required="false"/>
<uses-feature
+ android:name="android.hardware.sensor.accelerometer"
+ android:required="false"/>
+ <uses-feature
+ android:name="android.hardware.sensor.gyroscope"
+ android:required="false"/>
+ <uses-feature
android:name="android.hardware.gamepad"
android:required="false"/>
<uses-feature
diff --git a/Source/Android/app/src/main/assets/WiimoteNew.ini b/Source/Android/app/src/main/assets/WiimoteNew.ini
index 2ebd9d61d9..933c63e3ed 100644
--- a/Source/Android/app/src/main/assets/WiimoteNew.ini
+++ b/Source/Android/app/src/main/assets/WiimoteNew.ini
@@ -99,7 +99,7 @@ Guitar/Stick/Down = `Axis 411`
Guitar/Stick/Left = `Axis 412`
Guitar/Stick/Right = `Axis 413`
Guitar/Stick/Radius = 100,000000
-Guitar/Whammy/Bar = `Axis = 414`
+Guitar/Whammy/Bar = `Axis 414`
Drums/Buttons/- = `Button 500`
Drums/Buttons/+ = `Button 501`
Drums/Pads/Red = `Button 502`
@@ -135,6 +135,18 @@ Turntable/Stick/Radius = 100,000000
Turntable/Effect/Dial = `Axis 621`
Turntable/Crossfade/Left = `Axis 623`
Turntable/Crossfade/Right = `Axis 624`
+IMUAccelerometer/Left = `Axis 625`
+IMUAccelerometer/Right = `Axis 626`
+IMUAccelerometer/Forward = `Axis 627`
+IMUAccelerometer/Backward = `Axis 628`
+IMUAccelerometer/Up = `Axis 629`
+IMUAccelerometer/Down = `Axis 630`
+IMUGyroscope/Pitch Up = `Axis 631`
+IMUGyroscope/Pitch Down = `Axis 632`
+IMUGyroscope/Roll Left = `Axis 633`
+IMUGyroscope/Roll Right = `Axis 634`
+IMUGyroscope/Yaw Left = `Axis 635`
+IMUGyroscope/Yaw Right = `Axis 636`
Source = 1
Rumble/Motor = `Rumble 700`
[Wiimote2]
@@ -238,7 +250,7 @@ Guitar/Stick/Down = `Axis 411`
Guitar/Stick/Left = `Axis 412`
Guitar/Stick/Right = `Axis 413`
Guitar/Stick/Radius = 100,000000
-Guitar/Whammy/Bar = `Axis = 414`
+Guitar/Whammy/Bar = `Axis 414`
Drums/Buttons/- = `Button 500`
Drums/Buttons/+ = `Button 501`
Drums/Pads/Red = `Button 502`
@@ -274,6 +286,18 @@ Turntable/Stick/Radius = 100,000000
Turntable/Effect/Dial = `Axis 621`
Turntable/Crossfade/Left = `Axis 623`
Turntable/Crossfade/Right = `Axis 624`
+IMUAccelerometer/Left = `Axis 625`
+IMUAccelerometer/Right = `Axis 626`
+IMUAccelerometer/Forward = `Axis 627`
+IMUAccelerometer/Backward = `Axis 628`
+IMUAccelerometer/Up = `Axis 629`
+IMUAccelerometer/Down = `Axis 630`
+IMUGyroscope/Pitch Up = `Axis 631`
+IMUGyroscope/Pitch Down = `Axis 632`
+IMUGyroscope/Roll Left = `Axis 633`
+IMUGyroscope/Roll Right = `Axis 634`
+IMUGyroscope/Yaw Left = `Axis 635`
+IMUGyroscope/Yaw Right = `Axis 636`
Source = 0
Rumble/Motor = `Rumble 700`
[Wiimote3]
@@ -377,7 +401,7 @@ Guitar/Stick/Down = `Axis 411`
Guitar/Stick/Left = `Axis 412`
Guitar/Stick/Right = `Axis 413`
Guitar/Stick/Radius = 100,000000
-Guitar/Whammy/Bar = `Axis = 414`
+Guitar/Whammy/Bar = `Axis 414`
Drums/Buttons/- = `Button 500`
Drums/Buttons/+ = `Button 501`
Drums/Pads/Red = `Button 502`
@@ -413,6 +437,18 @@ Turntable/Stick/Radius = 100,000000
Turntable/Effect/Dial = `Axis 621`
Turntable/Crossfade/Left = `Axis 623`
Turntable/Crossfade/Right = `Axis 624`
+IMUAccelerometer/Left = `Axis 625`
+IMUAccelerometer/Right = `Axis 626`
+IMUAccelerometer/Forward = `Axis 627`
+IMUAccelerometer/Backward = `Axis 628`
+IMUAccelerometer/Up = `Axis 629`
+IMUAccelerometer/Down = `Axis 630`
+IMUGyroscope/Pitch Up = `Axis 631`
+IMUGyroscope/Pitch Down = `Axis 632`
+IMUGyroscope/Roll Left = `Axis 633`
+IMUGyroscope/Roll Right = `Axis 634`
+IMUGyroscope/Yaw Left = `Axis 635`
+IMUGyroscope/Yaw Right = `Axis 636`
Source = 0
Rumble/Motor = `Rumble 700`
[Wiimote4]
@@ -516,7 +552,7 @@ Guitar/Stick/Down = `Axis 411`
Guitar/Stick/Left = `Axis 412`
Guitar/Stick/Right = `Axis 413`
Guitar/Stick/Radius = 100,000000
-Guitar/Whammy/Bar = `Axis = 414`
+Guitar/Whammy/Bar = `Axis 414`
Drums/Buttons/- = `Button 500`
Drums/Buttons/+ = `Button 501`
Drums/Pads/Red = `Button 502`
@@ -552,5 +588,17 @@ Turntable/Stick/Radius = 100,000000
Turntable/Effect/Dial = `Axis 621`
Turntable/Crossfade/Left = `Axis 623`
Turntable/Crossfade/Right = `Axis 624`
+IMUAccelerometer/Left = `Axis 625`
+IMUAccelerometer/Right = `Axis 626`
+IMUAccelerometer/Forward = `Axis 627`
+IMUAccelerometer/Backward = `Axis 628`
+IMUAccelerometer/Up = `Axis 629`
+IMUAccelerometer/Down = `Axis 630`
+IMUGyroscope/Pitch Up = `Axis 631`
+IMUGyroscope/Pitch Down = `Axis 632`
+IMUGyroscope/Roll Left = `Axis 633`
+IMUGyroscope/Roll Right = `Axis 634`
+IMUGyroscope/Yaw Left = `Axis 635`
+IMUGyroscope/Yaw Right = `Axis 636`
Source = 0
Rumble/Motor = `Rumble 700`
diff --git a/Source/Android/app/src/main/assets/WiimoteProfile.ini b/Source/Android/app/src/main/assets/WiimoteProfile.ini
index 2546736d13..33e51c94d6 100644
--- a/Source/Android/app/src/main/assets/WiimoteProfile.ini
+++ b/Source/Android/app/src/main/assets/WiimoteProfile.ini
@@ -99,7 +99,7 @@ Guitar/Stick/Down = `Axis 411`
Guitar/Stick/Left = `Axis 412`
Guitar/Stick/Right = `Axis 413`
Guitar/Stick/Radius = 100,000000
-Guitar/Whammy/Bar = `Axis = 414`
+Guitar/Whammy/Bar = `Axis 414`
Drums/Buttons/- = `Button 500`
Drums/Buttons/+ = `Button 501`
Drums/Pads/Red = `Button 502`
@@ -135,4 +135,16 @@ Turntable/Stick/Radius = 100,000000
Turntable/Effect/Dial = `Axis 621`
Turntable/Crossfade/Left = `Axis 623`
Turntable/Crossfade/Right = `Axis 624`
+IMUAccelerometer/Left = `Axis 625`
+IMUAccelerometer/Right = `Axis 626`
+IMUAccelerometer/Forward = `Axis 627`
+IMUAccelerometer/Backward = `Axis 628`
+IMUAccelerometer/Up = `Axis 629`
+IMUAccelerometer/Down = `Axis 630`
+IMUGyroscope/Pitch Up = `Axis 631`
+IMUGyroscope/Pitch Down = `Axis 632`
+IMUGyroscope/Roll Left = `Axis 633`
+IMUGyroscope/Roll Right = `Axis 634`
+IMUGyroscope/Yaw Left = `Axis 635`
+IMUGyroscope/Yaw Right = `Axis 636`
Rumble/Motor = `Rumble 700`
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 1c748a5cea..171946a226 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -196,6 +196,18 @@ public final class NativeLibrary
public static final int TURNTABLE_CROSSFADE = 622;
public static final int TURNTABLE_CROSSFADE_LEFT = 623;
public static final int TURNTABLE_CROSSFADE_RIGHT = 624;
+ public static final int WIIMOTE_ACCEL_LEFT = 625;
+ public static final int WIIMOTE_ACCEL_RIGHT = 626;
+ public static final int WIIMOTE_ACCEL_FORWARD = 627;
+ public static final int WIIMOTE_ACCEL_BACKWARD = 628;
+ public static final int WIIMOTE_ACCEL_UP = 629;
+ public static final int WIIMOTE_ACCEL_DOWN = 630;
+ public static final int WIIMOTE_GYRO_PITCH_UP = 631;
+ public static final int WIIMOTE_GYRO_PITCH_DOWN = 632;
+ public static final int WIIMOTE_GYRO_ROLL_LEFT = 633;
+ public static final int WIIMOTE_GYRO_ROLL_RIGHT = 634;
+ public static final int WIIMOTE_GYRO_YAW_LEFT = 635;
+ public static final int WIIMOTE_GYRO_YAW_RIGHT = 636;
}
/**
@@ -254,6 +266,9 @@ public final class NativeLibrary
Rumble.checkRumble(padID, state);
}
+ public static native void SetMotionSensorsEnabled(boolean accelerometerEnabled,
+ boolean gyroscopeEnabled);
+
public static native void NewGameIniFile();
public static native void LoadGameIniFile(String gameId);
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 1b5661b9a0..68562e9969 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
@@ -26,6 +26,7 @@ import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
+import android.view.Surface;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
@@ -49,6 +50,7 @@ import org.dolphinemu.dolphinemu.utils.ControllerMappingHelper;
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper;
import org.dolphinemu.dolphinemu.utils.Java_GCAdapter;
import org.dolphinemu.dolphinemu.utils.Java_WiimoteAdapter;
+import org.dolphinemu.dolphinemu.utils.MotionListener;
import org.dolphinemu.dolphinemu.utils.Rumble;
import org.dolphinemu.dolphinemu.utils.TvUtil;
@@ -67,6 +69,7 @@ public final class EmulationActivity extends AppCompatActivity
private EmulationFragment mEmulationFragment;
private SharedPreferences mPreferences;
+ private MotionListener mMotionListener;
private ControllerMappingHelper mControllerMappingHelper;
private Settings mSettings;
@@ -97,7 +100,8 @@ public final class EmulationActivity extends AppCompatActivity
MENU_ACTION_SAVE_SLOT6, MENU_ACTION_LOAD_SLOT1, MENU_ACTION_LOAD_SLOT2,
MENU_ACTION_LOAD_SLOT3, MENU_ACTION_LOAD_SLOT4, MENU_ACTION_LOAD_SLOT5,
MENU_ACTION_LOAD_SLOT6, MENU_ACTION_EXIT, MENU_ACTION_CHANGE_DISC,
- MENU_ACTION_RESET_OVERLAY, MENU_SET_IR_SENSITIVITY, MENU_ACTION_CHOOSE_DOUBLETAP})
+ MENU_ACTION_RESET_OVERLAY, MENU_SET_IR_SENSITIVITY, MENU_ACTION_CHOOSE_DOUBLETAP,
+ MENU_ACTION_SCREEN_ORIENTATION, MENU_ACTION_MOTION_CONTROLS})
public @interface MenuAction
{
}
@@ -131,6 +135,8 @@ public final class EmulationActivity extends AppCompatActivity
public static final int MENU_ACTION_RESET_OVERLAY = 26;
public static final int MENU_SET_IR_SENSITIVITY = 27;
public static final int MENU_ACTION_CHOOSE_DOUBLETAP = 28;
+ public static final int MENU_ACTION_SCREEN_ORIENTATION = 29;
+ public static final int MENU_ACTION_MOTION_CONTROLS = 30;
private static SparseIntArray buttonsActionsMap = new SparseIntArray();
@@ -177,6 +183,10 @@ public final class EmulationActivity extends AppCompatActivity
EmulationActivity.MENU_SET_IR_SENSITIVITY);
buttonsActionsMap.append(R.id.menu_emulation_choose_doubletap,
EmulationActivity.MENU_ACTION_CHOOSE_DOUBLETAP);
+ buttonsActionsMap.append(R.id.menu_screen_orientation,
+ EmulationActivity.MENU_ACTION_SCREEN_ORIENTATION);
+ buttonsActionsMap.append(R.id.menu_emulation_motion_controls,
+ EmulationActivity.MENU_ACTION_MOTION_CONTROLS);
}
private static String[] scanForSecondDisc(GameFile gameFile)
@@ -252,13 +262,18 @@ public final class EmulationActivity extends AppCompatActivity
restoreState(savedInstanceState);
}
+ mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
+
mSettings = new Settings();
mSettings.loadSettings(null);
+ updateOrientation();
+
// TODO: The accurate way to find out which console we're emulating is to
// first launch emulation and then ask the core which console we're emulating
sIsGameCubeGame = Platform.fromNativeInt(mPlatform) == Platform.GAMECUBE;
mDeviceHasTouchScreen = getPackageManager().hasSystemFeature("android.hardware.touchscreen");
+ mMotionListener = new MotionListener(this);
mControllerMappingHelper = new ControllerMappingHelper();
int themeId;
@@ -295,17 +310,6 @@ public final class EmulationActivity extends AppCompatActivity
setContentView(R.layout.activity_emulation);
-
- BooleanSetting lockLandscapeSetting =
- (BooleanSetting) mSettings.getSection(Settings.SECTION_INI_CORE)
- .getSetting(SettingsFile.KEY_LOCK_LANDSCAPE);
- boolean lockLandscape = lockLandscapeSetting == null || lockLandscapeSetting.getValue();
- // Force landscape if set
- if (mDeviceHasTouchScreen && lockLandscape)
- {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
- }
-
// Find or create the EmulationFragment
mEmulationFragment = (EmulationFragment) getSupportFragmentManager()
.findFragmentById(R.id.frame_emulation_fragment);
@@ -321,9 +325,6 @@ public final class EmulationActivity extends AppCompatActivity
{
setTitle(mSelectedTitle);
}
-
- mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
-
}
@Override
@@ -349,6 +350,21 @@ public final class EmulationActivity extends AppCompatActivity
}
@Override
+ protected void onResume()
+ {
+ super.onResume();
+ if (!sIsGameCubeGame && mPreferences.getInt("motionControlsEnabled", 0) != 2)
+ mMotionListener.enable();
+ }
+
+ @Override
+ protected void onPause()
+ {
+ super.onPause();
+ mMotionListener.disable();
+ }
+
+ @Override
protected void onStop()
{
super.onStop();
@@ -414,6 +430,12 @@ public final class EmulationActivity extends AppCompatActivity
View.SYSTEM_UI_FLAG_IMMERSIVE);
}
+ private void updateOrientation()
+ {
+ setRequestedOrientation(mPreferences.getInt("emulationActivityOrientation",
+ ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE));
+ }
+
private void toggleMenu()
{
boolean result = getSupportFragmentManager().popBackStackImmediate(
@@ -629,6 +651,14 @@ public final class EmulationActivity extends AppCompatActivity
chooseDoubleTapButton();
return;
+ case MENU_ACTION_SCREEN_ORIENTATION:
+ chooseOrientation();
+ return;
+
+ case MENU_ACTION_MOTION_CONTROLS:
+ showMotionControlsOptions();
+ return;
+
case MENU_ACTION_EXIT:
// ATV menu is built using a fragment, this will pop that fragment before emulation ends.
if (TvUtil.isLeanback(getApplicationContext()))
@@ -852,6 +882,8 @@ public final class EmulationActivity extends AppCompatActivity
editor.putInt("wiiController", indexSelected);
NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "Extension",
getResources().getStringArray(R.array.controllersValues)[indexSelected]);
+ NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1",
+ "Options/Sideways Wiimote", indexSelected == 2 ? "True" : "False");
NativeLibrary.ReloadWiimoteConfig();
});
builder.setPositiveButton(getString(R.string.ok), (dialogInterface, i) ->
@@ -864,6 +896,63 @@ public final class EmulationActivity extends AppCompatActivity
alertDialog.show();
}
+ private void showMotionControlsOptions()
+ {
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.emulation_motion_controls);
+ builder.setSingleChoiceItems(R.array.motionControlsEntries,
+ mPreferences.getInt("motionControlsEnabled", 0),
+ (dialog, indexSelected) ->
+ {
+ editor.putInt("motionControlsEnabled", indexSelected);
+
+ if (indexSelected != 2)
+ mMotionListener.enable();
+ else
+ mMotionListener.disable();
+
+ NativeLibrary.SetConfig("WiimoteNew.ini", "Wiimote1", "IMUIR/Enabled",
+ indexSelected != 1 ? "True" : "False");
+ NativeLibrary.ReloadWiimoteConfig();
+ });
+ builder.setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> editor.apply());
+
+ AlertDialog alertDialog = builder.create();
+ alertDialog.show();
+ }
+
+ private void chooseOrientation()
+ {
+ final int[] orientationValues = getResources().getIntArray(R.array.orientationValues);
+ int initialChoice = mPreferences.getInt("emulationActivityOrientation",
+ ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+ int initialIndex = -1;
+ for (int i = 0; i < orientationValues.length; i++)
+ {
+ if (orientationValues[i] == initialChoice)
+ initialIndex = i;
+ }
+
+ final SharedPreferences.Editor editor = mPreferences.edit();
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.emulation_screen_orientation);
+ builder.setSingleChoiceItems(R.array.orientationEntries, initialIndex,
+ (dialog, indexSelected) ->
+ {
+ int orientation = orientationValues[indexSelected];
+ editor.putInt("emulationActivityOrientation", orientation);
+ });
+ builder.setPositiveButton(getString(R.string.ok), (dialogInterface, i) ->
+ {
+ editor.apply();
+ updateOrientation();
+ });
+
+ AlertDialog alertDialog = builder.create();
+ alertDialog.show();
+ }
+
private void setIRSensitivity()
{
int ir_pitch = Integer.valueOf(
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
index 271d556a4b..3c3f2f294f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
@@ -225,7 +225,6 @@ public final class SettingsFragmentPresenter
Setting autoDiscChange = null;
Setting analytics = null;
Setting enableSaveState;
- Setting lockToLandscape;
SettingSection coreSection = mSettings.getSection(Settings.SECTION_INI_CORE);
SettingSection dspSection = mSettings.getSection(Settings.SECTION_INI_DSP);
@@ -241,7 +240,6 @@ public final class SettingsFragmentPresenter
autoDiscChange = coreSection.getSetting(SettingsFile.KEY_AUTO_DISC_CHANGE);
analytics = analyticsSection.getSetting(SettingsFile.KEY_ANALYTICS_ENABLED);
enableSaveState = coreSection.getSetting(SettingsFile.KEY_ENABLE_SAVE_STATES);
- lockToLandscape = coreSection.getSetting(SettingsFile.KEY_LOCK_LANDSCAPE);
// TODO: Having different emuCoresEntries/emuCoresValues for each architecture is annoying.
// The proper solution would be to have one emuCoresEntries and one emuCoresValues
@@ -288,12 +286,6 @@ public final class SettingsFragmentPresenter
sl.add(new CheckBoxSetting(SettingsFile.KEY_ENABLE_SAVE_STATES, Settings.SECTION_INI_CORE,
R.string.enable_save_states, R.string.enable_save_states_description, false,
enableSaveState));
- if (!TvUtil.isLeanback(DolphinApplication.getAppContext()))
- {
- sl.add(new CheckBoxSetting(SettingsFile.KEY_LOCK_LANDSCAPE, Settings.SECTION_INI_CORE,
- R.string.lock_emulation_landscape, R.string.lock_emulation_landscape_desc, true,
- lockToLandscape));
- }
sl.add(new CheckBoxSetting(SettingsFile.KEY_ANALYTICS_ENABLED, Settings.SECTION_ANALYTICS,
R.string.analytics, 0, false, analytics));
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
index 6f7bf15be8..8de9bf5281 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
@@ -54,7 +54,6 @@ public final class SettingsFile
public static final String KEY_SLOT_A_DEVICE = "SlotA";
public static final String KEY_SLOT_B_DEVICE = "SlotB";
public static final String KEY_ENABLE_SAVE_STATES = "EnableSaveStates";
- public static final String KEY_LOCK_LANDSCAPE = "LockLandscape";
public static final String KEY_ANALYTICS_ENABLED = "Enabled";
public static final String KEY_ANALYTICS_PERMISSION_ASKED = "PermissionAsked";
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java
index 40e4a3d6ed..e2c6c1978c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java
@@ -571,22 +571,11 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener
}
if (mPreferences.getBoolean("buttonToggleWii7", true))
{
- if (mPreferences.getInt("wiiController", 3) == 2)
- {
- overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
- R.drawable.gcwii_dpad_pressed_one_direction,
- R.drawable.gcwii_dpad_pressed_two_directions,
- ButtonType.WIIMOTE_RIGHT, ButtonType.WIIMOTE_LEFT,
- ButtonType.WIIMOTE_UP, ButtonType.WIIMOTE_DOWN, orientation));
- }
- else
- {
- overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
- R.drawable.gcwii_dpad_pressed_one_direction,
- R.drawable.gcwii_dpad_pressed_two_directions,
- ButtonType.WIIMOTE_UP, ButtonType.WIIMOTE_DOWN,
- ButtonType.WIIMOTE_LEFT, ButtonType.WIIMOTE_RIGHT, orientation));
- }
+ overlayDpads.add(initializeOverlayDpad(getContext(), R.drawable.gcwii_dpad,
+ R.drawable.gcwii_dpad_pressed_one_direction,
+ R.drawable.gcwii_dpad_pressed_two_directions,
+ ButtonType.WIIMOTE_UP, ButtonType.WIIMOTE_DOWN,
+ ButtonType.WIIMOTE_LEFT, ButtonType.WIIMOTE_RIGHT, orientation));
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
index eeb3a78855..7742ac90ae 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
@@ -34,7 +34,7 @@ public final class DirectoryInitialization
"org.dolphinemu.dolphinemu.DIRECTORY_INITIALIZATION";
public static final String EXTRA_STATE = "directoryState";
- private static final Integer WiimoteNewVersion = 2;
+ private static final int WiimoteNewVersion = 3; // Last changed in PR 8439
private static volatile DirectoryInitializationState directoryState = null;
private static String userPath;
private static String internalPath;
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java
new file mode 100644
index 0000000000..31d1641aba
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/MotionListener.java
@@ -0,0 +1,126 @@
+package org.dolphinemu.dolphinemu.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.view.Surface;
+
+import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.NativeLibrary.ButtonType;
+
+public class MotionListener implements SensorEventListener
+{
+ private final Activity mActivity;
+ private final SensorManager mSensorManager;
+ private final Sensor mAccelSensor;
+ private final Sensor mGyroSensor;
+
+ private boolean mEnabled = false;
+
+ // The same sampling period as for Wii Remotes
+ private static final int SAMPLING_PERIOD_US = 1000000 / 200;
+
+ public MotionListener(Activity activity)
+ {
+ mActivity = activity;
+ mSensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE);
+ mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+ mGyroSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
+ }
+
+ @Override
+ public void onSensorChanged(SensorEvent sensorEvent)
+ {
+ float x, y;
+ float z = sensorEvent.values[2];
+ int orientation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
+ switch (orientation)
+ {
+ default:
+ case Surface.ROTATION_0:
+ x = -sensorEvent.values[0];
+ y = -sensorEvent.values[1];
+ break;
+ case Surface.ROTATION_90:
+ x = sensorEvent.values[1];
+ y = -sensorEvent.values[0];
+ break;
+ case Surface.ROTATION_180:
+ x = sensorEvent.values[0];
+ y = sensorEvent.values[1];
+ break;
+ case Surface.ROTATION_270:
+ x = -sensorEvent.values[1];
+ y = sensorEvent.values[0];
+ break;
+ }
+
+ if (sensorEvent.sensor == mAccelSensor)
+ {
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_LEFT, x);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_RIGHT, x);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_FORWARD, y);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_BACKWARD, y);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_UP, z);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_ACCEL_DOWN, z);
+ }
+
+ if (sensorEvent.sensor == mGyroSensor)
+ {
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_PITCH_UP, x);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_PITCH_DOWN, x);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_ROLL_LEFT, y);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_ROLL_RIGHT, y);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_YAW_LEFT, z);
+ NativeLibrary.onGamePadMoveEvent(NativeLibrary.TouchScreenDevice,
+ ButtonType.WIIMOTE_GYRO_YAW_RIGHT, z);
+ }
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int i)
+ {
+ // We don't care about this
+ }
+
+ public void enable()
+ {
+ if (mEnabled)
+ return;
+
+ if (mAccelSensor != null)
+ mSensorManager.registerListener(this, mAccelSensor, SAMPLING_PERIOD_US);
+ if (mGyroSensor != null)
+ mSensorManager.registerListener(this, mGyroSensor, SAMPLING_PERIOD_US);
+
+ NativeLibrary.SetMotionSensorsEnabled(mAccelSensor != null, mGyroSensor != null);
+
+ mEnabled = true;
+ }
+
+ public void disable()
+ {
+ if (!mEnabled)
+ return;
+
+ mSensorManager.unregisterListener(this);
+
+ NativeLibrary.SetMotionSensorsEnabled(false, false);
+
+ mEnabled = false;
+ }
+}
diff --git a/Source/Android/app/src/main/res/menu/menu_emulation.xml b/Source/Android/app/src/main/res/menu/menu_emulation.xml
index cfa126c4c9..6f0abbeae7 100644
--- a/Source/Android/app/src/main/res/menu/menu_emulation.xml
+++ b/Source/Android/app/src/main/res/menu/menu_emulation.xml
@@ -114,6 +114,11 @@
</item>
<item
+ android:id="@+id/menu_screen_orientation"
+ app:showAsAction="never"
+ android:title="@string/emulation_screen_orientation"/>
+
+ <item
android:id="@+id/menu_change_disc"
app:showAsAction="never"
android:title="@string/emulation_change_disc"/>
diff --git a/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml b/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
index a964338aab..73a4d6a506 100644
--- a/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
+++ b/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
@@ -113,6 +113,10 @@
android:id="@+id/menu_emulation_choose_controller"
android:title="@string/emulation_choose_controller"/>
<item
+ android:id="@+id/menu_emulation_motion_controls"
+ android:title="@string/emulation_motion_controls"/>
+
+ <item
android:id="@+id/menu_emulation_ir_group"
android:title="@string/emulation_ir_group"
app:showAsAction="never">
@@ -134,6 +138,11 @@
</item>
<item
+ android:id="@+id/menu_screen_orientation"
+ app:showAsAction="never"
+ android:title="@string/emulation_screen_orientation"/>
+
+ <item
android:id="@+id/menu_change_disc"
app:showAsAction="never"
android:title="@string/emulation_change_disc"/>
diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml
index 3cfffe433f..fb0200e753 100644
--- a/Source/Android/app/src/main/res/values/arrays.xml
+++ b/Source/Android/app/src/main/res/values/arrays.xml
@@ -350,4 +350,21 @@
<item>Wii Controller Settings</item>
<item>Clear Game Settings</item>
</string-array>
+
+ <string-array name="orientationEntries">
+ <item>Landscape</item>
+ <item>Portrait</item>
+ <item>Auto</item>
+ </string-array>
+ <integer-array name="orientationValues">
+ <item>0</item>
+ <item>1</item>
+ <item>-1</item>
+ </integer-array>
+
+ <string-array name="motionControlsEntries">
+ <item>Use Device Sensors (With Pointer Emulation)</item>
+ <item>Use Device Sensors (Without Pointer Emulation)</item>
+ <item>Don\'t Use Device Sensors</item>
+ </string-array>
</resources>
diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml
index f1346dfdde..1e7ef2114a 100644
--- a/Source/Android/app/src/main/res/values/strings.xml
+++ b/Source/Android/app/src/main/res/values/strings.xml
@@ -318,6 +318,8 @@
<string name="emulation_ir_group">Touch IR Pointer</string>
<string name="emulation_ir_sensitivity">IR Sensitivity</string>
<string name="emulation_choose_doubletap">Double tap button</string>
+ <string name="emulation_screen_orientation">Screen Orientation</string>
+ <string name="emulation_motion_controls">Motion Controls</string>
<!-- GC Adapter Menu-->
<string name="gc_adapter_rumble">Enable Vibration</string>