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;