diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2JoystickSettingsMenu.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2JoystickSettingsMenu.java index 637b8118..38ff1690 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2JoystickSettingsMenu.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2JoystickSettingsMenu.java @@ -204,12 +204,12 @@ public class Apple2JoystickSettingsMenu extends Apple2AbstractMenu { JOYSTICK_ADVANCED { @Override public final String getTitle(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced); + return activity.getResources().getString(R.string.settings_advanced); } @Override public final String getSummary(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced_summary); + return activity.getResources().getString(R.string.settings_advanced_joystick_summary); } @Override @@ -272,6 +272,30 @@ public class Apple2JoystickSettingsMenu extends Apple2AbstractMenu { } protected enum SETTINGS implements Apple2AbstractMenu.IMenuEnum { + JOYSTICK_VISIBILITY { + @Override + public final String getTitle(Apple2Activity activity) { + return activity.getResources().getString(R.string.joystick_visible); + } + + @Override + public final String getSummary(Apple2Activity activity) { + return activity.getResources().getString(R.string.joystick_visible_summary); + } + + @Override + public View getView(final Apple2Activity activity, View convertView) { + convertView = _basicView(activity, this, convertView); + CheckBox cb = _addCheckbox(activity, this, convertView, Apple2Preferences.JOYSTICK_VISIBILITY.booleanValue(activity)); + cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Apple2Preferences.JOYSTICK_VISIBILITY.saveBoolean(activity, isChecked); + } + }); + return convertView; + } + }, JOYSTICK_AXIS_ON_LEFT { @Override public final String getTitle(Apple2Activity activity) { diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeypadSettingsMenu.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeypadSettingsMenu.java index 037b07c6..b58cb4cd 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeypadSettingsMenu.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2KeypadSettingsMenu.java @@ -133,12 +133,12 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu { KEYPAD_ADVANCED { @Override public final String getTitle(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced); + return activity.getResources().getString(R.string.settings_advanced); } @Override public final String getSummary(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced_summary); + return activity.getResources().getString(R.string.settings_advanced_joystick_summary); } @Override @@ -263,12 +263,12 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu { JOYSTICK_ADVANCED { @Override public final String getTitle(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced); + return activity.getResources().getString(R.string.settings_advanced_joystick); } @Override public final String getSummary(Apple2Activity activity) { - return activity.getResources().getString(R.string.joystick_advanced_summary); + return activity.getResources().getString(R.string.settings_advanced_joystick_summary); } @Override diff --git a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2Preferences.java b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2Preferences.java index bcd16067..db36432f 100644 --- a/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2Preferences.java +++ b/Android/app/src/main/java/org/deadc0de/apple2ix/Apple2Preferences.java @@ -334,6 +334,17 @@ public enum Apple2Preferences { return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), JOYSTICK_DIVIDER_NUM_CHOICES >> 1); } }, + JOYSTICK_VISIBILITY { + @Override + public void load(Apple2Activity activity) { + nativeSetTouchJoystickVisibility(booleanValue(activity)); + } + + @Override + public boolean booleanValue(Apple2Activity activity) { + return activity.getPreferences(Context.MODE_PRIVATE).getBoolean(toString(), true); + } + }, KEYPAD_KEYS { @Override public void load(Apple2Activity activity) { @@ -841,6 +852,8 @@ public enum Apple2Preferences { private static native void nativeSetTouchJoystickButtonSwitchThreshold(int delta); + private static native void nativeSetTouchJoystickVisibility(boolean visibility); + public static native void nativeSetTouchMenuEnabled(boolean enabled); private static native void nativeSetTouchMenuVisibility(float alpha); diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml index 878d8fd8..fc6e678a 100644 --- a/Android/app/src/main/res/values/strings.xml +++ b/Android/app/src/main/res/values/strings.xml @@ -33,8 +33,6 @@ Touch keyboard Joystick Touch Joystick - Advanced tuning… - Various joystick/keypad configuration parameters Tune joystick axis sensitivity (decelerate or accelerate) Enable button axis Enable button axis @@ -53,11 +51,13 @@ Calibrate… Configure and test current settings Configure joystick… - Axis touch/tilt, buttons, etc + Axis touch, buttons, etc Current joystick flavor Emulated physical joystick or keypad Joystick/keypad axis on left Joystick/keypad axis on left (buttons on right) + Joystick/keypad visibility + Show controls overlay when engaged [ClosedApple] [Ctrl] @@ -69,6 +69,9 @@ [Space] + Keyboard + Configure keyboard… + Transparency, fading, custom keys Keyboard visibility Keyboard visibility when inactive Keypad Joystick @@ -84,7 +87,7 @@ Choose XXX Key: I,J,K,M [Space] Configure keypad joystick… - Axis touch/tilt, buttons, etc + @string/joystick_configure_summary Center Down Down and Left @@ -106,9 +109,6 @@ ←,→, tap spacebar W,A,D,X, tap spacebar Key repeat threshold in secs - Keyboard - Configure keyboard… - Transparency, fading, custom keys Max Load disk image… Insert a Disk ][ image file @@ -147,6 +147,8 @@ Apple2ix audio settings Advanced settings Warning: these settings may potentially degrade emulation performance + Advanced joystick/keypad settings + Advanced settings and performance tuning General Joystick SecondActivity diff --git a/Android/jni/jniprefs.c b/Android/jni/jniprefs.c index 393710cf..b68ae317 100644 --- a/Android/jni/jniprefs.c +++ b/Android/jni/jniprefs.c @@ -97,6 +97,11 @@ void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetCurrentTouchDevice(JN } } +void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetTouchJoystickVisibility(JNIEnv *env, jclass cls, jboolean visibility) { + LOG("visibility: %d", visibility); + joydriver_setShowControls(visibility); +} + jint Java_org_deadc0de_apple2ix_Apple2Preferences_nativeGetCurrentTouchDevice(JNIEnv *env, jclass cls) { LOG("%s", ""); if (joydriver_ownsScreen()) { diff --git a/src/joystick.c b/src/joystick.c index 1d60822c..c213c93d 100644 --- a/src/joystick.c +++ b/src/joystick.c @@ -276,6 +276,7 @@ void (*joydriver_setAxisOnLeft)(bool axisIsOnLeft) = NULL; void (*joydriver_beginCalibration)(void) = NULL; void (*joydriver_endCalibration)(void) = NULL; bool (*joydriver_isCalibrating)(void) = NULL; +void (*joydriver_setShowControls)(bool showControls) = NULL; void (*joydriver_setKeyRepeatThreshold)(float repeatThresholdSecs) = NULL; #endif diff --git a/src/joystick.h b/src/joystick.h index 69b73e9a..6002c186 100644 --- a/src/joystick.h +++ b/src/joystick.h @@ -122,6 +122,9 @@ extern void (*joydriver_endCalibration)(void); // end calibration mode extern bool (*joydriver_isCalibrating)(void); +// set controls visibility +extern void (*joydriver_setShowControls)(bool showControls); + // set key repeat threshold (keypad joystick) extern void (*joydriver_setKeyRepeatThreshold)(float repeatThresholdSecs); diff --git a/src/video/gltouchjoy.c b/src/video/gltouchjoy.c index 1ea20614..2c970ee3 100644 --- a/src/video/gltouchjoy.c +++ b/src/video/gltouchjoy.c @@ -108,6 +108,10 @@ static void _setup_axis_object(GLModel *parent) { return; } + if (!joyglobals.showControls) { + return; + } + GLModelHUDElement *hudElement = (GLModelHUDElement *)parent->custom; if (hudElement->tpl == NULL) { @@ -156,6 +160,10 @@ static void _setup_button_object(GLModel *parent) { return; } + if (!joyglobals.showControls) { + return; + } + GLModelHUDElement *hudElement = (GLModelHUDElement *)parent->custom; if (hudElement->tpl == NULL) { @@ -345,6 +353,9 @@ static void gltouchjoy_render(void) { if (!joyglobals.ownsScreen) { return; } + if (!joyglobals.showControls) { + return; + } glViewport(0, 0, touchport.width, touchport.height); // NOTE : show these HUD elements beyond the A2 framebuffer dimensions @@ -663,6 +674,10 @@ static bool gltouchjoy_ownsScreen(void) { return joyglobals.ownsScreen; } +static void gltouchjoy_setShowControls(bool showControls) { + joyglobals.showControls = showControls; +} + static void _animation_showTouchJoystick(void) { if (!joyglobals.isAvailable) { return; @@ -845,6 +860,7 @@ static void _init_gltouchjoy(void) { joyglobals.isEnabled = true; joyglobals.ownsScreen = true; + joyglobals.showControls = true; joyglobals.screenDivider = 0.5f; joyglobals.axisIsOnLeft = true; joyglobals.switchThreshold = BUTTON_SWITCH_THRESHOLD_DEFAULT; @@ -856,6 +872,7 @@ static void _init_gltouchjoy(void) { joydriver_setTouchJoystickEnabled = &gltouchjoy_setTouchJoystickEnabled; joydriver_setTouchJoystickOwnsScreen = &gltouchjoy_setTouchJoystickOwnsScreen; joydriver_ownsScreen = &gltouchjoy_ownsScreen; + joydriver_setShowControls = &gltouchjoy_setShowControls; joydriver_setTouchButtonTypes = &gltouchjoy_setTouchButtonTypes; joydriver_setTapDelay = &gltouchjoy_setTapDelay; joydriver_setTouchAxisSensitivity = &gltouchjoy_setTouchAxisSensitivity; diff --git a/src/video/gltouchjoy.h b/src/video/gltouchjoy.h index 643b6005..0fb9e2a5 100644 --- a/src/video/gltouchjoy.h +++ b/src/video/gltouchjoy.h @@ -26,6 +26,7 @@ typedef struct GLTouchJoyGlobals { bool isCalibrating; // Are we running in calibration mode? bool isEnabled; // Does player want touchjoy enabled? bool ownsScreen; // Does the touchjoy currently own the screen? + bool showControls; // Are controls visible float minAlphaWhenOwnsScreen; float minAlpha; float screenDivider;