diff options
| author | Markus Wick <degasus@users.noreply.github.com> | 2018-07-11 08:41:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-11 08:41:06 +0200 |
| commit | d819df1d081c8016aaddd3548b8857166f9c777a (patch) | |
| tree | cdd903c18f058affd4eca058d63e5ee98446650b /Source/Android/app/src/main/java | |
| parent | bf4341f7623ab44743315f0c346ebfc8a9e8e960 (diff) | |
| parent | 82ec3c929c4ef4ccaca5e587808bbfc9ed5f6098 (diff) | |
Merge pull request #7186 from gwicks/androidTouchJoystickRelCenter
Android: Make touch joystick re-centering configurable
Diffstat (limited to 'Source/Android/app/src/main/java')
3 files changed, 45 insertions, 4 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 4a02cfc89c..8ecb545298 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 @@ -120,6 +120,7 @@ public final class EmulationActivity extends AppCompatActivity public static final int MENU_ACTION_LOAD_SLOT6 = 21; public static final int MENU_ACTION_EXIT = 22; public static final int MENU_ACTION_CHANGE_DISC = 23; + public static final int MENU_ACTION_JOYSTICK_REL_CENTER = 24; private static SparseIntArray buttonsActionsMap = new SparseIntArray(); @@ -147,6 +148,7 @@ public final class EmulationActivity extends AppCompatActivity buttonsActionsMap.append(R.id.menu_emulation_load_5, EmulationActivity.MENU_ACTION_LOAD_SLOT5); buttonsActionsMap.append(R.id.menu_change_disc, EmulationActivity.MENU_ACTION_CHANGE_DISC); buttonsActionsMap.append(R.id.menu_exit, EmulationActivity.MENU_ACTION_EXIT); + buttonsActionsMap.append(R.id.menu_emulation_joystick_rel_center, EmulationActivity.MENU_ACTION_JOYSTICK_REL_CENTER); } public static void launch(FragmentActivity activity, GameFile gameFile, int position, View sharedView) @@ -431,6 +433,10 @@ public final class EmulationActivity extends AppCompatActivity { getMenuInflater().inflate(R.menu.menu_emulation_wii, menu); } + + // Populate the checkbox value for joystick center on touch + menu.findItem(R.id.menu_emulation_joystick_rel_center).setChecked(mPreferences.getBoolean("joystickRelCenter", true)); + return true; } @@ -441,11 +447,30 @@ public final class EmulationActivity extends AppCompatActivity int action = buttonsActionsMap.get(item.getItemId(), -1); if (action >= 0) { - handleMenuAction(action); + if (item.isCheckable()) + { + // Need to pass a reference to the item to set the checkbox state, since it is not done automatically + handleCheckableMenuAction(action, item); + } + else + { + handleMenuAction(action); + } } return true; } + public void handleCheckableMenuAction(@MenuAction int menuAction, MenuItem item) + { + switch (menuAction) + { + case MENU_ACTION_JOYSTICK_REL_CENTER: + item.setChecked(!item.isChecked()); + toggleJoystickRelCenter(item.isChecked()); + return; + } + } + public void handleMenuAction(@MenuAction int menuAction) { switch (menuAction) @@ -565,6 +590,13 @@ public final class EmulationActivity extends AppCompatActivity } } + private void toggleJoystickRelCenter(boolean state) + { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putBoolean("joystickRelCenter", state); + editor.commit(); + } + private void editControlsPlacement() { 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 1957ff7f67..d3726bf88f 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 @@ -829,7 +829,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener final InputOverlayDrawableJoystick overlayDrawable = new InputOverlayDrawableJoystick(res, bitmapOuter, bitmapInnerDefault, bitmapInnerPressed, - outerRect, innerRect, joystick); + outerRect, innerRect, joystick, sPrefs); // Need to set the image's position overlayDrawable.setPosition(drawableX, drawableY); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java index 1c94b44135..8083b0d2ee 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlayDrawableJoystick.java @@ -6,6 +6,8 @@ package org.dolphinemu.dolphinemu.overlay; +import android.content.Context; +import android.content.SharedPreferences; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -19,6 +21,8 @@ import android.view.MotionEvent; */ public final class InputOverlayDrawableJoystick { + private SharedPreferences mPreferences; + private final int[] axisIDs = {0, 0, 0, 0}; private final float[] axises = {0f, 0f}; private int trackId = -1; @@ -48,7 +52,7 @@ public final class InputOverlayDrawableJoystick */ public InputOverlayDrawableJoystick(Resources res, Bitmap bitmapOuter, Bitmap bitmapInnerDefault, Bitmap bitmapInnerPressed, - Rect rectOuter, Rect rectInner, int joystick) + Rect rectOuter, Rect rectInner, int joystick, SharedPreferences prefsHandle) { axisIDs[0] = joystick + 1; axisIDs[1] = joystick + 2; @@ -56,6 +60,7 @@ public final class InputOverlayDrawableJoystick axisIDs[3] = joystick + 4; mJoystickType = joystick; + mPreferences = prefsHandle; mOuterBitmap = new BitmapDrawable(res, bitmapOuter); mDefaultStateInnerBitmap = new BitmapDrawable(res, bitmapInnerDefault); mPressedStateInnerBitmap = new BitmapDrawable(res, bitmapInnerPressed); @@ -92,6 +97,7 @@ public final class InputOverlayDrawableJoystick public void TrackEvent(MotionEvent event) { + boolean reCenter = mPreferences.getBoolean("joystickRelCenter", true); int pointerIndex = event.getActionIndex(); switch(event.getAction() & MotionEvent.ACTION_MASK) @@ -103,7 +109,10 @@ public final class InputOverlayDrawableJoystick mPressedState = true; mOuterBitmap.setAlpha(0); mBoundsBoxBitmap.setAlpha(255); - getVirtBounds().offset((int)event.getX(pointerIndex) - getVirtBounds().centerX(), (int)event.getY(pointerIndex) - getVirtBounds().centerY()); + if (reCenter) + { + getVirtBounds().offset((int)event.getX(pointerIndex) - getVirtBounds().centerX(), (int)event.getY(pointerIndex) - getVirtBounds().centerY()); + } mBoundsBoxBitmap.setBounds(getVirtBounds()); trackId = event.getPointerId(pointerIndex); } |
