mirror of
https://github.com/mauiaaron/apple2.git
synced 2025-03-16 18:31:16 +00:00
Improve joystick calibration modes and keypad menus
This commit is contained in:
parent
a031a23999
commit
d2b526783a
@ -70,8 +70,13 @@ public class Apple2JoystickCalibration implements Apple2MenuView {
|
|||||||
Apple2Preferences.nativeSetTouchMenuEnabled(false);
|
Apple2Preferences.nativeSetTouchMenuEnabled(false);
|
||||||
mSavedTouchDevice = Apple2Preferences.CURRENT_TOUCH_DEVICE.intValue(mActivity);
|
mSavedTouchDevice = Apple2Preferences.CURRENT_TOUCH_DEVICE.intValue(mActivity);
|
||||||
Apple2Preferences.nativeSetCurrentTouchDevice(variant.ordinal());
|
Apple2Preferences.nativeSetCurrentTouchDevice(variant.ordinal());
|
||||||
|
if (variant == Apple2Preferences.TouchDeviceVariant.JOYSTICK) {
|
||||||
|
Apple2Preferences.loadAllJoystickButtons(mActivity);
|
||||||
|
} else {
|
||||||
|
Apple2Preferences.loadAllKeypadKeys(mActivity);
|
||||||
|
}
|
||||||
|
|
||||||
Apple2Preferences.nativeTouchJoystickBeginCalibrationMode();
|
Apple2Preferences.nativeTouchDeviceBeginCalibrationMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean isCalibrating() {
|
public final boolean isCalibrating() {
|
||||||
@ -96,9 +101,9 @@ public class Apple2JoystickCalibration implements Apple2MenuView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Apple2Preferences.nativeTouchDeviceEndCalibrationMode();
|
||||||
Apple2Preferences.nativeSetTouchMenuEnabled(mTouchMenuEnabled);
|
Apple2Preferences.nativeSetTouchMenuEnabled(mTouchMenuEnabled);
|
||||||
Apple2Preferences.nativeSetCurrentTouchDevice(mSavedTouchDevice);
|
Apple2Preferences.nativeSetCurrentTouchDevice(mSavedTouchDevice);
|
||||||
Apple2Preferences.nativeTouchJoystickEndCalibrationMode();
|
|
||||||
|
|
||||||
mActivity.popApple2View(this);
|
mActivity.popApple2View(this);
|
||||||
}
|
}
|
||||||
|
@ -240,7 +240,7 @@ public class Apple2JoystickSettingsMenu extends Apple2AbstractMenu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static class JoystickAdvanced extends Apple2AbstractMenu {
|
public static class JoystickAdvanced extends Apple2AbstractMenu {
|
||||||
|
|
||||||
private final static String TAG = "JoystickAdvanced";
|
private final static String TAG = "JoystickAdvanced";
|
||||||
|
|
||||||
@ -268,7 +268,7 @@ public class Apple2JoystickSettingsMenu extends Apple2AbstractMenu {
|
|||||||
if (position < 0 || position >= SETTINGS.size) {
|
if (position < 0 || position >= SETTINGS.size) {
|
||||||
throw new ArrayIndexOutOfBoundsException();
|
throw new ArrayIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
return position != SETTINGS.JOYSTICK_AXIS_SENSITIVIY.ordinal();
|
return position == SETTINGS.JOYSTICK_AXIS_ON_LEFT.ordinal();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
protected enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
||||||
|
@ -12,8 +12,11 @@
|
|||||||
package org.deadc0de.apple2ix;
|
package org.deadc0de.apple2ix;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
@ -26,8 +29,9 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
private Apple2Activity mActivity = null;
|
private Apple2Activity mActivity = null;
|
||||||
private View mSettingsView = null;
|
private View mSettingsView = null;
|
||||||
private ArrayList<Apple2MenuView> mViewStack = null;
|
private ArrayList<Apple2MenuView> mViewStack = null;
|
||||||
private TextView mTextViewAxisChosenKeys = null;
|
private TextView mCurrentChoicePrompt = null;
|
||||||
private TextView mTextViewButtonsChosenKeys = null;
|
|
||||||
|
private String[] foo = null;
|
||||||
|
|
||||||
private STATE_MACHINE mChooserState = STATE_MACHINE.CHOOSE_NORTHWEST;
|
private STATE_MACHINE mChooserState = STATE_MACHINE.CHOOSE_NORTHWEST;
|
||||||
|
|
||||||
@ -51,12 +55,40 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
if (scancode == 0) {
|
if (scancode == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.d(TAG, "ascii:'" + asciiRepresentation(ascii) + "' scancode:" + scancode);
|
|
||||||
mChooserState.setValues(mActivity, ascii, scancode);
|
|
||||||
mChooserState = mChooserState.next();
|
|
||||||
|
|
||||||
mTextViewAxisChosenKeys.setText(getConfiguredAxisString());
|
String asciiStr = asciiRepresentation(ascii);
|
||||||
mTextViewButtonsChosenKeys.setText(getConfiguredButtonsString());
|
Log.d(TAG, "ascii:'" + asciiStr + "' scancode:" + scancode);
|
||||||
|
mChooserState.setValues(mActivity, ascii, scancode);
|
||||||
|
Apple2Preferences.nativeSetCurrentTouchDevice(Apple2Preferences.TouchDeviceVariant.JOYSTICK_KEYPAD.ordinal());
|
||||||
|
mCurrentChoicePrompt.setText(getNextChoiceString() + asciiStr);
|
||||||
|
switch(mChooserState) {
|
||||||
|
case CHOOSE_TAP:
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_DOWN, 1, 0, new float[]{400.f}, new float[]{400.f});
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_UP, 1, 0, new float[]{400.f}, new float[]{400.f});
|
||||||
|
break;
|
||||||
|
case CHOOSE_SWIPEDOWN:
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_DOWN, 1, 0, new float[]{400.f}, new float[]{400.f});
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_MOVE, 1, 0, new float[]{400.f}, new float[]{600.f});
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_UP, 1, 0, new float[]{400.f}, new float[]{600.f});
|
||||||
|
break;
|
||||||
|
case CHOOSE_SWIPEUP:
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_DOWN, 1, 0, new float[]{400.f}, new float[]{400.f});
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_MOVE, 1, 0, new float[]{400.f}, new float[]{200.f});
|
||||||
|
mActivity.nativeOnTouch(MotionEvent.ACTION_UP, 1, 0, new float[]{400.f}, new float[]{200.f});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Handler handler = new Handler();
|
||||||
|
handler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mChooserState = mChooserState.next();
|
||||||
|
mCurrentChoicePrompt.setText(getNextChoiceString());
|
||||||
|
Apple2Preferences.nativeSetCurrentTouchDevice(Apple2Preferences.TouchDeviceVariant.KEYBOARD.ordinal());
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void show() {
|
public void show() {
|
||||||
@ -73,9 +105,9 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Apple2Preferences.nativeTouchDeviceEndCalibrationMode();
|
||||||
Apple2Preferences.nativeSetTouchMenuEnabled(mTouchMenuEnabled);
|
Apple2Preferences.nativeSetTouchMenuEnabled(mTouchMenuEnabled);
|
||||||
Apple2Preferences.nativeSetCurrentTouchDevice(mSavedTouchDevice);
|
Apple2Preferences.nativeSetCurrentTouchDevice(mSavedTouchDevice);
|
||||||
Apple2Preferences.nativeTouchJoystickEndCalibrationMode(); // FIXME TODO : this should set not-joystick, not-keyboard, but keypad emulation
|
|
||||||
|
|
||||||
mActivity.popApple2View(this);
|
mActivity.popApple2View(this);
|
||||||
}
|
}
|
||||||
@ -99,13 +131,8 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
mSettingsView = inflater.inflate(R.layout.activity_chooser_keypad, null, false);
|
mSettingsView = inflater.inflate(R.layout.activity_chooser_keypad, null, false);
|
||||||
|
|
||||||
// FIXME TODO: need to convert mousetext glyphs to equivalent Java/Android glyphs (or something akin to that)
|
mCurrentChoicePrompt = (TextView) mSettingsView.findViewById(R.id.currentChoicePrompt);
|
||||||
|
mCurrentChoicePrompt.setText(getNextChoiceString());
|
||||||
mTextViewAxisChosenKeys = (TextView) mSettingsView.findViewById(R.id.textViewAxisChosenKeys);
|
|
||||||
mTextViewAxisChosenKeys.setText(getConfiguredAxisString());
|
|
||||||
|
|
||||||
mTextViewButtonsChosenKeys = (TextView) mSettingsView.findViewById(R.id.textViewButtonsChosenKeys);
|
|
||||||
mTextViewButtonsChosenKeys.setText(getConfiguredButtonsString());
|
|
||||||
|
|
||||||
// temporarily undo these native touch settings while calibrating...
|
// temporarily undo these native touch settings while calibrating...
|
||||||
mTouchMenuEnabled = Apple2Preferences.TOUCH_MENU_ENABLED.booleanValue(mActivity);
|
mTouchMenuEnabled = Apple2Preferences.TOUCH_MENU_ENABLED.booleanValue(mActivity);
|
||||||
@ -113,7 +140,7 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
mSavedTouchDevice = Apple2Preferences.CURRENT_TOUCH_DEVICE.intValue(mActivity);
|
mSavedTouchDevice = Apple2Preferences.CURRENT_TOUCH_DEVICE.intValue(mActivity);
|
||||||
Apple2Preferences.nativeSetCurrentTouchDevice(Apple2Preferences.TouchDeviceVariant.KEYBOARD.ordinal());
|
Apple2Preferences.nativeSetCurrentTouchDevice(Apple2Preferences.TouchDeviceVariant.KEYBOARD.ordinal());
|
||||||
|
|
||||||
Apple2Preferences.nativeTouchJoystickBeginCalibrationMode(); // FIXME TODO : this should set not-joystick, not-keyboard, but keypad emulation
|
Apple2Preferences.nativeTouchDeviceBeginCalibrationMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String asciiRepresentation(char ascii) {
|
private String asciiRepresentation(char ascii) {
|
||||||
@ -146,123 +173,139 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getConfiguredAxisString() {
|
private String getNextChoiceString() {
|
||||||
StringBuilder configuredAxes = new StringBuilder();
|
String choose = mActivity.getResources().getString(R.string.keypad_choose_current);
|
||||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_chosen_axis_keys));
|
return choose.replace("XXX", mChooserState.getKeyName(mActivity));
|
||||||
configuredAxes.append(" ");
|
|
||||||
|
|
||||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_key_axis_up));
|
|
||||||
configuredAxes.append(":");
|
|
||||||
configuredAxes.append(asciiRepresentation(Apple2Preferences.KEYPAD_NORTH_KEY.asciiValue(mActivity)));
|
|
||||||
configuredAxes.append(", ");
|
|
||||||
|
|
||||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_key_axis_left));
|
|
||||||
configuredAxes.append(":");
|
|
||||||
configuredAxes.append(asciiRepresentation(Apple2Preferences.KEYPAD_WEST_KEY.asciiValue(mActivity)));
|
|
||||||
configuredAxes.append(", ");
|
|
||||||
|
|
||||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_key_axis_right));
|
|
||||||
configuredAxes.append(":");
|
|
||||||
configuredAxes.append(asciiRepresentation(Apple2Preferences.KEYPAD_EAST_KEY.asciiValue(mActivity)));
|
|
||||||
configuredAxes.append(", ");
|
|
||||||
|
|
||||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_key_axis_down));
|
|
||||||
configuredAxes.append(":");
|
|
||||||
configuredAxes.append(asciiRepresentation(Apple2Preferences.KEYPAD_SOUTH_KEY.asciiValue(mActivity)));
|
|
||||||
|
|
||||||
return configuredAxes.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getConfiguredButtonsString() {
|
|
||||||
StringBuilder configuredButtons = new StringBuilder();
|
|
||||||
configuredButtons.append(mActivity.getResources().getString(R.string.keypad_chosen_buttons_keys));
|
|
||||||
configuredButtons.append(" ");
|
|
||||||
|
|
||||||
configuredButtons.append(mActivity.getResources().getString(R.string.keypad_key_button_tap));
|
|
||||||
configuredButtons.append(":");
|
|
||||||
configuredButtons.append(asciiRepresentation(Apple2Preferences.KEYPAD_TAP_KEY.asciiValue(mActivity)));
|
|
||||||
configuredButtons.append(", ");
|
|
||||||
|
|
||||||
configuredButtons.append(mActivity.getResources().getString(R.string.keypad_key_button_swipeup));
|
|
||||||
configuredButtons.append(":");
|
|
||||||
configuredButtons.append(asciiRepresentation(Apple2Preferences.KEYPAD_SWIPEUP_KEY.asciiValue(mActivity)));
|
|
||||||
configuredButtons.append(", ");
|
|
||||||
|
|
||||||
configuredButtons.append(mActivity.getResources().getString(R.string.keypad_key_button_swipedown));
|
|
||||||
configuredButtons.append(":");
|
|
||||||
configuredButtons.append(asciiRepresentation(Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.asciiValue(mActivity)));
|
|
||||||
|
|
||||||
return configuredButtons.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum STATE_MACHINE {
|
private enum STATE_MACHINE {
|
||||||
CHOOSE_NORTHWEST {
|
CHOOSE_NORTHWEST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_ul);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_NORTH {
|
CHOOSE_NORTH {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_up);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_NORTHEAST {
|
CHOOSE_NORTHEAST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_ur);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_WEST {
|
CHOOSE_WEST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_l);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_CENTER {
|
CHOOSE_CENTER {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_c);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_EAST {
|
CHOOSE_EAST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_r);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_SOUTHWEST {
|
CHOOSE_SOUTHWEST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_dl);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_SOUTH {
|
CHOOSE_SOUTH {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_dn);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_SOUTHEAST {
|
CHOOSE_SOUTHEAST {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_axis_dr);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_TAP {
|
CHOOSE_TAP {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_button_tap);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_SWIPEUP {
|
CHOOSE_SWIPEUP {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_button_swipeup);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CHOOSE_SWIPEDOWN {
|
CHOOSE_SWIPEDOWN {
|
||||||
|
@Override
|
||||||
|
public String getKeyName(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_key_button_swipedown);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, ascii, scancode);
|
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, ascii, scancode);
|
||||||
@ -273,6 +316,8 @@ public class Apple2KeypadChooser implements Apple2MenuView {
|
|||||||
|
|
||||||
public abstract void setValues(Apple2Activity activity, char ascii, int scancode);
|
public abstract void setValues(Apple2Activity activity, char ascii, int scancode);
|
||||||
|
|
||||||
|
public abstract String getKeyName(Apple2Activity activity);
|
||||||
|
|
||||||
public STATE_MACHINE next() {
|
public STATE_MACHINE next() {
|
||||||
int nextOrd = this.ordinal() + 1;
|
int nextOrd = this.ordinal() + 1;
|
||||||
if (nextOrd >= size) {
|
if (nextOrd >= size) {
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
package org.deadc0de.apple2ix;
|
package org.deadc0de.apple2ix;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@ -74,11 +77,12 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
|||||||
_alertDialogHandleSelection(activity, R.string.keypad_choose_title, titles, new IPreferenceLoadSave() {
|
_alertDialogHandleSelection(activity, R.string.keypad_choose_title, titles, new IPreferenceLoadSave() {
|
||||||
@Override
|
@Override
|
||||||
public int intValue() {
|
public int intValue() {
|
||||||
return -1;
|
return Apple2Preferences.KEYPAD_KEYS.intValue(activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveInt(int value) {
|
public void saveInt(int value) {
|
||||||
|
Apple2Preferences.KEYPAD_KEYS.saveInt(activity, value);
|
||||||
if (value == 0) {
|
if (value == 0) {
|
||||||
Apple2KeypadSettingsMenu keypadSettingsMenu = (Apple2KeypadSettingsMenu) settingsMenu;
|
Apple2KeypadSettingsMenu keypadSettingsMenu = (Apple2KeypadSettingsMenu) settingsMenu;
|
||||||
keypadSettingsMenu.chooseKeys(activity);
|
keypadSettingsMenu.chooseKeys(activity);
|
||||||
@ -125,6 +129,22 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
|||||||
activity.popApple2View(apple2MenuView);
|
activity.popApple2View(apple2MenuView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
KEYPAD_ADVANCED {
|
||||||
|
@Override
|
||||||
|
public final String getTitle(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.joystick_advanced);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String getSummary(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.joystick_advanced_summary);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleSelection(Apple2Activity activity, Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
||||||
|
new Apple2KeypadSettingsMenu.KeypadAdvanced(activity).show();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final int size = SETTINGS.values().length;
|
public static final int size = SETTINGS.values().length;
|
||||||
@ -176,4 +196,108 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
|||||||
activity.popApple2View(apple2MenuView);
|
activity.popApple2View(apple2MenuView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static class KeypadAdvanced extends Apple2AbstractMenu {
|
||||||
|
|
||||||
|
private final static String TAG = "KeypadAdvanced";
|
||||||
|
|
||||||
|
public KeypadAdvanced(Apple2Activity activity) {
|
||||||
|
super(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String[] allTitles() {
|
||||||
|
return SETTINGS.titles(mActivity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final IMenuEnum[] allValues() {
|
||||||
|
return SETTINGS.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final boolean areAllItemsEnabled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final boolean isEnabled(int position) {
|
||||||
|
if (position < 0 || position >= SETTINGS.size) {
|
||||||
|
throw new ArrayIndexOutOfBoundsException();
|
||||||
|
}
|
||||||
|
return position == SETTINGS.JOYSTICK_ADVANCED.ordinal();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
||||||
|
KEYREPEAT_THRESHOLD {
|
||||||
|
@Override
|
||||||
|
public final String getTitle(Apple2Activity activity) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String getSummary(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.keypad_repeat_summary);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(final Apple2Activity activity, View convertView) {
|
||||||
|
return _sliderView(activity, this, Apple2Preferences.KEYREPEAT_NUM_CHOICES, new IPreferenceSlider() {
|
||||||
|
@Override
|
||||||
|
public void saveInt(int progress) {
|
||||||
|
Apple2Preferences.KEYREPEAT_THRESHOLD.saveInt(activity, progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int intValue() {
|
||||||
|
return Apple2Preferences.KEYREPEAT_THRESHOLD.intValue(activity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showValue(int progress, final TextView seekBarValue) {
|
||||||
|
seekBarValue.setText("" + ((float) progress / Apple2Preferences.KEYREPEAT_NUM_CHOICES));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
JOYSTICK_ADVANCED {
|
||||||
|
@Override
|
||||||
|
public final String getTitle(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.joystick_advanced);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final String getSummary(Apple2Activity activity) {
|
||||||
|
return activity.getResources().getString(R.string.joystick_advanced_summary);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleSelection(Apple2Activity activity, Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
||||||
|
new Apple2JoystickSettingsMenu.JoystickAdvanced(activity).show();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public static final int size = SETTINGS.values().length;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleSelection(Apple2Activity activity, Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(Apple2Activity activity, View convertView) {
|
||||||
|
return _basicView(activity, this, convertView);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] titles(Apple2Activity activity) {
|
||||||
|
String[] titles = new String[size];
|
||||||
|
int i = 0;
|
||||||
|
for (SETTINGS setting : values()) {
|
||||||
|
titles[i++] = setting.getTitle(activity);
|
||||||
|
}
|
||||||
|
return titles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,6 +334,17 @@ public enum Apple2Preferences {
|
|||||||
return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), JOYSTICK_DIVIDER_NUM_CHOICES >> 1);
|
return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), JOYSTICK_DIVIDER_NUM_CHOICES >> 1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
KEYPAD_KEYS {
|
||||||
|
@Override
|
||||||
|
public void load(Apple2Activity activity) {
|
||||||
|
/* ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int intValue(Apple2Activity activity) {
|
||||||
|
return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), -1);
|
||||||
|
}
|
||||||
|
},
|
||||||
KEYPAD_NORTHWEST_KEY {
|
KEYPAD_NORTHWEST_KEY {
|
||||||
@Override
|
@Override
|
||||||
public void load(Apple2Activity activity) {
|
public void load(Apple2Activity activity) {
|
||||||
@ -405,6 +416,19 @@ public enum Apple2Preferences {
|
|||||||
public void load(Apple2Activity activity) {
|
public void load(Apple2Activity activity) {
|
||||||
loadAllKeypadKeys(activity);
|
loadAllKeypadKeys(activity);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
KEYREPEAT_THRESHOLD {
|
||||||
|
@Override
|
||||||
|
public void load(Apple2Activity activity) {
|
||||||
|
int tick = intValue(activity);
|
||||||
|
nativeSetTouchDeviceKeyRepeatThreshold((float) tick / KEYREPEAT_NUM_CHOICES);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int intValue(Apple2Activity activity) {
|
||||||
|
int defaultLatency = KEYREPEAT_NUM_CHOICES / 4;
|
||||||
|
return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), defaultLatency);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public enum HiresColor {
|
public enum HiresColor {
|
||||||
@ -617,6 +641,8 @@ public enum Apple2Preferences {
|
|||||||
public final static int TAPDELAY_NUM_CHOICES = DECENT_AMOUNT_OF_CHOICES;
|
public final static int TAPDELAY_NUM_CHOICES = DECENT_AMOUNT_OF_CHOICES;
|
||||||
public final static float TAPDELAY_SCALE = 0.5f;
|
public final static float TAPDELAY_SCALE = 0.5f;
|
||||||
|
|
||||||
|
public final static int KEYREPEAT_NUM_CHOICES = DECENT_AMOUNT_OF_CHOICES;
|
||||||
|
|
||||||
public final static String TAG = "Apple2Preferences";
|
public final static String TAG = "Apple2Preferences";
|
||||||
|
|
||||||
public final static int JOYSTICK_BUTTON_THRESHOLD_NUM_CHOICES = DECENT_AMOUNT_OF_CHOICES;
|
public final static int JOYSTICK_BUTTON_THRESHOLD_NUM_CHOICES = DECENT_AMOUNT_OF_CHOICES;
|
||||||
@ -738,7 +764,7 @@ public enum Apple2Preferences {
|
|||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void loadAllKeypadKeys(Apple2Activity activity) {
|
public static void loadAllKeypadKeys(Apple2Activity activity) {
|
||||||
int[] rosetteChars = new int[]{
|
int[] rosetteChars = new int[]{
|
||||||
KEYPAD_NORTHWEST_KEY.asciiValue(activity),
|
KEYPAD_NORTHWEST_KEY.asciiValue(activity),
|
||||||
KEYPAD_NORTH_KEY.asciiValue(activity),
|
KEYPAD_NORTH_KEY.asciiValue(activity),
|
||||||
@ -774,7 +800,7 @@ public enum Apple2Preferences {
|
|||||||
nativeTouchJoystickSetKeypadTypes(rosetteChars, rosetteScancodes, buttonsChars, buttonsScancodes);
|
nativeTouchJoystickSetKeypadTypes(rosetteChars, rosetteScancodes, buttonsChars, buttonsScancodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static void loadAllJoystickButtons(Apple2Activity activity) {
|
public static void loadAllJoystickButtons(Apple2Activity activity) {
|
||||||
nativeSetTouchJoystickButtonTypes(
|
nativeSetTouchJoystickButtonTypes(
|
||||||
JOYSTICK_TAP_BUTTON.intValue(activity),
|
JOYSTICK_TAP_BUTTON.intValue(activity),
|
||||||
JOYSTICK_SWIPEUP_BUTTON.intValue(activity),
|
JOYSTICK_SWIPEUP_BUTTON.intValue(activity),
|
||||||
@ -819,10 +845,12 @@ public enum Apple2Preferences {
|
|||||||
|
|
||||||
public static native void nativeTouchJoystickSetAxisOnLeft(boolean axisIsOnLeft);
|
public static native void nativeTouchJoystickSetAxisOnLeft(boolean axisIsOnLeft);
|
||||||
|
|
||||||
public static native void nativeTouchJoystickBeginCalibrationMode();
|
public static native void nativeTouchDeviceBeginCalibrationMode();
|
||||||
|
|
||||||
public static native void nativeTouchJoystickEndCalibrationMode();
|
public static native void nativeTouchDeviceEndCalibrationMode();
|
||||||
|
|
||||||
private static native void nativeTouchJoystickSetKeypadTypes(int[] rosetteChars, int[] rosetteScancodes, int[] buttonsChars, int[] buttonsScancodes);
|
private static native void nativeTouchJoystickSetKeypadTypes(int[] rosetteChars, int[] rosetteScancodes, int[] buttonsChars, int[] buttonsScancodes);
|
||||||
|
|
||||||
|
private static native void nativeSetTouchDeviceKeyRepeatThreshold(float threshold);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,17 +14,8 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/keypad_chosen_axis_keys"
|
android:text="@string/keypad_choose_current"
|
||||||
android:id="@+id/textViewAxisChosenKeys"
|
android:id="@+id/currentChoicePrompt"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentStart="true" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/keypad_chosen_buttons_keys"
|
|
||||||
android:id="@+id/textViewButtonsChosenKeys"
|
|
||||||
android:layout_below="@id/textViewAxisChosenKeys"
|
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_alignParentStart="true" />
|
android:layout_alignParentStart="true" />
|
||||||
|
|
||||||
|
@ -33,8 +33,8 @@
|
|||||||
<string name="input_first_keyboard">Touch keyboard</string>
|
<string name="input_first_keyboard">Touch keyboard</string>
|
||||||
<string name="joystick">Joystick</string>
|
<string name="joystick">Joystick</string>
|
||||||
<string name="joystickA">Touch Joystick</string>
|
<string name="joystickA">Touch Joystick</string>
|
||||||
<string name="joystick_advanced">Advanced configuration…</string>
|
<string name="joystick_advanced">Advanced tuning…</string>
|
||||||
<string name="joystick_advanced_summary">Various tuning parameters</string>
|
<string name="joystick_advanced_summary">Various joystick/keypad configuration parameters</string>
|
||||||
<string name="joystick_axis_sensitivity_summary">Tune joystick axis sensitivity (decelerate or accelerate)</string>
|
<string name="joystick_axis_sensitivity_summary">Tune joystick axis sensitivity (decelerate or accelerate)</string>
|
||||||
<string name="joystick_button_axis_enable">Enable button axis</string>
|
<string name="joystick_button_axis_enable">Enable button axis</string>
|
||||||
<string name="joystick_button_axis_enable_summary">Enable button axis</string>
|
<string name="joystick_button_axis_enable_summary">Enable button axis</string>
|
||||||
@ -44,7 +44,7 @@
|
|||||||
<string name="joystick_button_button_none">None</string>
|
<string name="joystick_button_button_none">None</string>
|
||||||
<string name="joystick_button_tap_button">Tap fire</string>
|
<string name="joystick_button_tap_button">Tap fire</string>
|
||||||
<string name="joystick_button_tap_button_summary">Button to fire on tap down</string>
|
<string name="joystick_button_tap_button_summary">Button to fire on tap down</string>
|
||||||
<string name="joystick_button_tapdelay_summary">Joystick/keypad tap delay in secs</string>
|
<string name="joystick_button_tapdelay_summary">Joystick/keypad button tap delay in secs</string>
|
||||||
<string name="joystick_button_swipe_up_button">Swipe up fire</string>
|
<string name="joystick_button_swipe_up_button">Swipe up fire</string>
|
||||||
<string name="joystick_button_swipe_up_button_summary">Button to fire on swipe up</string>
|
<string name="joystick_button_swipe_up_button_summary">Button to fire on swipe up</string>
|
||||||
<string name="joystick_button_swipe_down_button">Swipe down fire</string>
|
<string name="joystick_button_swipe_down_button">Swipe down fire</string>
|
||||||
@ -69,6 +69,8 @@
|
|||||||
<string name="key_right">→</string>
|
<string name="key_right">→</string>
|
||||||
<string name="key_space">[Space]</string>
|
<string name="key_space">[Space]</string>
|
||||||
<string name="key_up">↑</string>
|
<string name="key_up">↑</string>
|
||||||
|
<string name="keyboard_visibility">Keyboard visibility</string>
|
||||||
|
<string name="keyboard_visibility_summary">Keyboard visibility when inactive</string>
|
||||||
<string name="keypad">Keypad Joystick</string>
|
<string name="keypad">Keypad Joystick</string>
|
||||||
<string name="keypadA">Touch Keypad Joystick</string>
|
<string name="keypadA">Touch Keypad Joystick</string>
|
||||||
<string name="keypad_button_tap_button">Tap key:</string>
|
<string name="keypad_button_tap_button">Tap key:</string>
|
||||||
@ -79,14 +81,19 @@
|
|||||||
<string name="keypad_choose">Choose keypad keys…</string>
|
<string name="keypad_choose">Choose keypad keys…</string>
|
||||||
<string name="keypad_choose_summary">Choose axis and button keys</string>
|
<string name="keypad_choose_summary">Choose axis and button keys</string>
|
||||||
<string name="keypad_choose_title">Axis & buttons</string>
|
<string name="keypad_choose_title">Axis & buttons</string>
|
||||||
<string name="keypad_chosen_axis_keys">Chosen axis keys: </string>
|
<string name="keypad_choose_current">Choose XXX Key: </string>
|
||||||
<string name="keypad_chosen_buttons_keys">Chosen buttons keys: </string>
|
<string name="keypad_chosen_keys">I,J,K,M [Space]</string>
|
||||||
<string name="keypad_configure">Configure keypad joystick…</string>
|
<string name="keypad_configure">Configure keypad joystick…</string>
|
||||||
<string name="keypad_configure_summary">Axis touch/tilt, buttons, etc</string>
|
<string name="keypad_configure_summary">Axis touch/tilt, buttons, etc</string>
|
||||||
|
<string name="keypad_key_axis_c">Center</string>
|
||||||
|
<string name="keypad_key_axis_dn">Down</string>
|
||||||
|
<string name="keypad_key_axis_dl">Down and Left</string>
|
||||||
|
<string name="keypad_key_axis_dr">Down and Right</string>
|
||||||
|
<string name="keypad_key_axis_l">Left</string>
|
||||||
|
<string name="keypad_key_axis_r">Right</string>
|
||||||
|
<string name="keypad_key_axis_ul">Up and Left</string>
|
||||||
<string name="keypad_key_axis_up">Up</string>
|
<string name="keypad_key_axis_up">Up</string>
|
||||||
<string name="keypad_key_axis_down">Down</string>
|
<string name="keypad_key_axis_ur">Up and Right</string>
|
||||||
<string name="keypad_key_axis_left">Left</string>
|
|
||||||
<string name="keypad_key_axis_right">Right</string>
|
|
||||||
<string name="keypad_key_button_tap">Tap</string>
|
<string name="keypad_key_button_tap">Tap</string>
|
||||||
<string name="keypad_key_button_swipeup">Swipe Up</string>
|
<string name="keypad_key_button_swipeup">Swipe Up</string>
|
||||||
<string name="keypad_key_button_swipedown">Swipe Down</string>
|
<string name="keypad_key_button_swipedown">Swipe Down</string>
|
||||||
@ -98,6 +105,7 @@
|
|||||||
<string name="keypad_preset_ijkm_space">I,J,K,M, tap spacebar</string>
|
<string name="keypad_preset_ijkm_space">I,J,K,M, tap spacebar</string>
|
||||||
<string name="keypad_preset_left_right_space">←,→, tap spacebar</string>
|
<string name="keypad_preset_left_right_space">←,→, tap spacebar</string>
|
||||||
<string name="keypad_preset_wadx_space">W,A,D,X, tap spacebar</string>
|
<string name="keypad_preset_wadx_space">W,A,D,X, tap spacebar</string>
|
||||||
|
<string name="keypad_repeat_summary">Key repeat threshold in secs</string>
|
||||||
<string name="keyboard">Keyboard</string>
|
<string name="keyboard">Keyboard</string>
|
||||||
<string name="keyboard_configure">Configure keyboard…</string>
|
<string name="keyboard_configure">Configure keyboard…</string>
|
||||||
<string name="keyboard_configure_summary">Transparency, fading, custom keys</string>
|
<string name="keyboard_configure_summary">Transparency, fading, custom keys</string>
|
||||||
|
@ -84,17 +84,20 @@ void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetCurrentTouchDevice(JN
|
|||||||
keydriver_setTouchKeyboardOwnsScreen(false);
|
keydriver_setTouchKeyboardOwnsScreen(false);
|
||||||
joydriver_setTouchJoystickOwnsScreen(true);
|
joydriver_setTouchJoystickOwnsScreen(true);
|
||||||
joydriver_setTouchVariant(EMULATED_JOYSTICK);
|
joydriver_setTouchVariant(EMULATED_JOYSTICK);
|
||||||
|
video_backend->animation_showTouchJoystick();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ANDROID_TOUCH_JOYSTICK_KEYPAD:
|
case ANDROID_TOUCH_JOYSTICK_KEYPAD:
|
||||||
keydriver_setTouchKeyboardOwnsScreen(false);
|
keydriver_setTouchKeyboardOwnsScreen(false);
|
||||||
joydriver_setTouchJoystickOwnsScreen(true);
|
joydriver_setTouchJoystickOwnsScreen(true);
|
||||||
joydriver_setTouchVariant(EMULATED_KEYPAD);
|
joydriver_setTouchVariant(EMULATED_KEYPAD);
|
||||||
|
video_backend->animation_showTouchJoystick();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ANDROID_TOUCH_KEYBOARD:
|
case ANDROID_TOUCH_KEYBOARD:
|
||||||
keydriver_setTouchKeyboardOwnsScreen(true);
|
keydriver_setTouchKeyboardOwnsScreen(true);
|
||||||
joydriver_setTouchJoystickOwnsScreen(false);
|
joydriver_setTouchJoystickOwnsScreen(false);
|
||||||
|
video_backend->animation_showTouchKeyboard();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ANDROID_TOUCH_NONE:
|
case ANDROID_TOUCH_NONE:
|
||||||
@ -222,14 +225,27 @@ void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeTouchJoystickSetKeypadTy
|
|||||||
(*env)->ReleaseIntArrayElements(env, jButtonsScans, buttonsScans, 0);
|
(*env)->ReleaseIntArrayElements(env, jButtonsScans, buttonsScans, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeTouchJoystickBeginCalibrationMode(JNIEnv *env, jclass cls) {
|
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeTouchDeviceBeginCalibrationMode(JNIEnv *env, jclass cls) {
|
||||||
LOG("nativeTouchJoystickBeginCalibrationMode() ...");
|
LOG("nativeTouchDeviceBeginCalibrationMode() ...");
|
||||||
joydriver_beginCalibration();
|
if (joydriver_ownsScreen()) {
|
||||||
|
joydriver_beginCalibration();
|
||||||
|
} else if (keydriver_ownsScreen()) {
|
||||||
|
keydriver_beginCalibration();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeTouchJoystickEndCalibrationMode(JNIEnv *env, jclass cls) {
|
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeTouchDeviceEndCalibrationMode(JNIEnv *env, jclass cls) {
|
||||||
LOG("nativeTouchJoystickEndCalibrationMode() ...");
|
LOG("nativeTouchDeviceEndCalibrationMode() ...");
|
||||||
joydriver_endCalibration();
|
if (joydriver_ownsScreen()) {
|
||||||
|
joydriver_endCalibration();
|
||||||
|
} else if (keydriver_ownsScreen()) {
|
||||||
|
keydriver_endCalibration();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Java_org_deadc0de_apple2ix_Apple2Preferences_nativeSetTouchDeviceKeyRepeatThreshold(JNIEnv *env, jclass cls, jfloat threshold) {
|
||||||
|
LOG("...");
|
||||||
|
joydriver_setKeyRepeatThreshold(threshold);
|
||||||
}
|
}
|
||||||
|
|
||||||
jint Java_org_deadc0de_apple2ix_Apple2Preferences_nativeGetCPUSpeed(JNIEnv *env, jclass cls) {
|
jint Java_org_deadc0de_apple2ix_Apple2Preferences_nativeGetCPUSpeed(JNIEnv *env, jclass cls) {
|
||||||
|
@ -276,5 +276,6 @@ void (*joydriver_setAxisOnLeft)(bool axisIsOnLeft) = NULL;
|
|||||||
void (*joydriver_beginCalibration)(void) = NULL;
|
void (*joydriver_beginCalibration)(void) = NULL;
|
||||||
void (*joydriver_endCalibration)(void) = NULL;
|
void (*joydriver_endCalibration)(void) = NULL;
|
||||||
bool (*joydriver_isCalibrating)(void) = NULL;
|
bool (*joydriver_isCalibrating)(void) = NULL;
|
||||||
|
void (*joydriver_setKeyRepeatThreshold)(float repeatThresholdSecs) = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -121,6 +121,9 @@ extern void (*joydriver_endCalibration)(void);
|
|||||||
// end calibration mode
|
// end calibration mode
|
||||||
extern bool (*joydriver_isCalibrating)(void);
|
extern bool (*joydriver_isCalibrating)(void);
|
||||||
|
|
||||||
|
// set key repeat threshold (keypad joystick)
|
||||||
|
extern void (*joydriver_setKeyRepeatThreshold)(float repeatThresholdSecs);
|
||||||
|
|
||||||
#endif // INTERFACE_TOUCH
|
#endif // INTERFACE_TOUCH
|
||||||
|
|
||||||
#endif // whole file
|
#endif // whole file
|
||||||
|
@ -495,5 +495,7 @@ void (*keydriver_setTouchKeyboardEnabled)(bool enabled) = NULL;
|
|||||||
void (*keydriver_setTouchKeyboardOwnsScreen)(bool pwnd) = NULL;
|
void (*keydriver_setTouchKeyboardOwnsScreen)(bool pwnd) = NULL;
|
||||||
bool (*keydriver_ownsScreen)(void) = NULL;
|
bool (*keydriver_ownsScreen)(void) = NULL;
|
||||||
void (*keydriver_keyboardReadCallback)(void) = NULL;
|
void (*keydriver_keyboardReadCallback)(void) = NULL;
|
||||||
|
void (*keydriver_beginCalibration)(void) = NULL;
|
||||||
|
void (*keydriver_endCalibration)(void) = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -163,6 +163,12 @@ extern bool (*keydriver_ownsScreen)(void);
|
|||||||
|
|
||||||
// keyboard read callback
|
// keyboard read callback
|
||||||
extern void (*keydriver_keyboardReadCallback)(void);
|
extern void (*keydriver_keyboardReadCallback)(void);
|
||||||
|
|
||||||
|
// begin calibration mode
|
||||||
|
extern void (*keydriver_beginCalibration)(void);
|
||||||
|
|
||||||
|
// end calibration mode
|
||||||
|
extern void (*keydriver_endCalibration)(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -303,8 +303,10 @@ static void gltouchjoy_setup(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &axes.timingBegin);
|
struct timespec now;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &buttons.timingBegin);
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
axes.timingBegin = now;
|
||||||
|
buttons.timingBegin = now;
|
||||||
|
|
||||||
joyglobals.isAvailable = true;
|
joyglobals.isAvailable = true;
|
||||||
}
|
}
|
||||||
@ -628,11 +630,13 @@ static int64_t gltouchjoy_onTouchEvent(interface_touch_event_t action, int point
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct timespec now;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
if (axisConsumed) {
|
if (axisConsumed) {
|
||||||
clock_gettime(CLOCK_MONOTONIC, &axes.timingBegin);
|
axes.timingBegin = now;
|
||||||
}
|
}
|
||||||
if (buttonConsumed) {
|
if (buttonConsumed) {
|
||||||
clock_gettime(CLOCK_MONOTONIC, &buttons.timingBegin);
|
buttons.timingBegin = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TOUCH_FLAGS_HANDLED | TOUCH_FLAGS_JOY;
|
return TOUCH_FLAGS_HANDLED | TOUCH_FLAGS_JOY;
|
||||||
@ -663,8 +667,21 @@ static void _animation_showTouchJoystick(void) {
|
|||||||
if (!joyglobals.isAvailable) {
|
if (!joyglobals.isAvailable) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clock_gettime(CLOCK_MONOTONIC, &axes.timingBegin);
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &buttons.timingBegin);
|
int x = touchport.axisX + ((touchport.axisXMax - touchport.axisX)/2);
|
||||||
|
int y = touchport.axisY + ((touchport.axisYMax - touchport.axisY)/2);
|
||||||
|
_reset_model_position(axes.model, x, y, AXIS_OBJ_HALF_W, AXIS_OBJ_HALF_H);
|
||||||
|
axes.modelDirty = true;
|
||||||
|
|
||||||
|
x = touchport.buttonX + ((touchport.buttonXMax - touchport.buttonX)/2);
|
||||||
|
y = touchport.buttonY + ((touchport.buttonYMax - touchport.buttonY)/2);
|
||||||
|
_reset_model_position(buttons.model, x, y, BUTTON_OBJ_HALF_W, BUTTON_OBJ_HALF_H);
|
||||||
|
buttons.modelDirty = true;
|
||||||
|
|
||||||
|
struct timespec now;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
axes.timingBegin = now;
|
||||||
|
buttons.timingBegin = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _animation_hideTouchJoystick(void) {
|
static void _animation_hideTouchJoystick(void) {
|
||||||
@ -751,10 +768,12 @@ static void gltouchjoy_setAxisOnLeft(bool axisIsOnLeft) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void gltouchjoy_beginCalibration(void) {
|
static void gltouchjoy_beginCalibration(void) {
|
||||||
|
video_clear();
|
||||||
joyglobals.isCalibrating = true;
|
joyglobals.isCalibrating = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gltouchjoy_endCalibration(void) {
|
static void gltouchjoy_endCalibration(void) {
|
||||||
|
video_redraw();
|
||||||
joyglobals.isCalibrating = false;
|
joyglobals.isCalibrating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ static struct {
|
|||||||
bool axisTiming;
|
bool axisTiming;
|
||||||
bool buttonTiming;
|
bool buttonTiming;
|
||||||
|
|
||||||
|
float repeatThresholdNanos;
|
||||||
|
|
||||||
} kpad = { 0 };
|
} kpad = { 0 };
|
||||||
|
|
||||||
static GLTouchJoyVariant kpadJoy = { 0 };
|
static GLTouchJoyVariant kpadJoy = { 0 };
|
||||||
@ -77,7 +79,7 @@ static void touchkpad_keyboardReadCallback(void) {
|
|||||||
int scancode = kpad.scancodes[kpad.fireIdx];
|
int scancode = kpad.scancodes[kpad.fireIdx];
|
||||||
if (scancode >= 0) {
|
if (scancode >= 0) {
|
||||||
struct timespec deltat = timespec_diff(kpad.timingBegins[kpad.fireIdx], now, NULL);
|
struct timespec deltat = timespec_diff(kpad.timingBegins[kpad.fireIdx], now, NULL);
|
||||||
if (deltat.tv_sec || deltat.tv_nsec > KEY_REPEAT_THRESHOLD_NANOS) {
|
if (deltat.tv_sec || deltat.tv_nsec > kpad.repeatThresholdNanos) {
|
||||||
LOG("REPEAT #%d/%lu/%lu: %d", kpad.fireIdx, deltat.tv_sec, deltat.tv_nsec, scancode);
|
LOG("REPEAT #%d/%lu/%lu: %d", kpad.fireIdx, deltat.tv_sec, deltat.tv_nsec, scancode);
|
||||||
c_keys_handle_input(scancode, /*pressed:*/true, /*ASCII:*/false);
|
c_keys_handle_input(scancode, /*pressed:*/true, /*ASCII:*/false);
|
||||||
fired = true;
|
fired = true;
|
||||||
@ -393,6 +395,10 @@ static void touchkpad_buttonRelease(void) {
|
|||||||
c_keys_handle_input(kpad.scancodes[REPEAT_BUTTON], /*pressed:*/false, /*ASCII:*/false);
|
c_keys_handle_input(kpad.scancodes[REPEAT_BUTTON], /*pressed:*/false, /*ASCII:*/false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void touchkpad_setKeyRepeatThreshold(float repeatThresholdSecs) {
|
||||||
|
kpad.repeatThresholdNanos = repeatThresholdSecs * NANOSECONDS_PER_SECOND;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
__attribute__((constructor(CTOR_PRIORITY_EARLY)))
|
__attribute__((constructor(CTOR_PRIORITY_EARLY)))
|
||||||
@ -405,6 +411,8 @@ static void _init_gltouchjoy_kpad(void) {
|
|||||||
|
|
||||||
kpad.currButtonDisplayChar = ' ';
|
kpad.currButtonDisplayChar = ' ';
|
||||||
|
|
||||||
|
kpad.repeatThresholdNanos = KEY_REPEAT_THRESHOLD_NANOS;
|
||||||
|
|
||||||
kpadJoy.variant = &touchkpad_variant,
|
kpadJoy.variant = &touchkpad_variant,
|
||||||
kpadJoy.resetState = &touchkpad_resetState,
|
kpadJoy.resetState = &touchkpad_resetState,
|
||||||
|
|
||||||
@ -416,6 +424,8 @@ static void _init_gltouchjoy_kpad(void) {
|
|||||||
kpadJoy.axisMove = &touchkpad_axisMove,
|
kpadJoy.axisMove = &touchkpad_axisMove,
|
||||||
kpadJoy.axisUp = &touchkpad_axisUp,
|
kpadJoy.axisUp = &touchkpad_axisUp,
|
||||||
|
|
||||||
|
joydriver_setKeyRepeatThreshold = &touchkpad_setKeyRepeatThreshold;
|
||||||
|
|
||||||
gltouchjoy_registerVariant(EMULATED_KEYPAD, &kpadJoy);
|
gltouchjoy_registerVariant(EMULATED_KEYPAD, &kpadJoy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ HUD_CLASS(GLModelHUDKeyboard,
|
|||||||
static bool isAvailable = false; // Were there any OpenGL/memory errors on gltouchkbd initialization?
|
static bool isAvailable = false; // Were there any OpenGL/memory errors on gltouchkbd initialization?
|
||||||
static bool isEnabled = true; // Does player want touchkbd enabled?
|
static bool isEnabled = true; // Does player want touchkbd enabled?
|
||||||
static bool ownsScreen = false; // Does the touchkbd currently own the screen to the exclusion?
|
static bool ownsScreen = false; // Does the touchkbd currently own the screen to the exclusion?
|
||||||
|
static bool isCalibrating = false; // Are we in calibration mode?
|
||||||
static bool allowLowercase = false; // show lowercase keyboard
|
static bool allowLowercase = false; // show lowercase keyboard
|
||||||
static float minAlphaWhenOwnsScreen = 1/4.f;
|
static float minAlphaWhenOwnsScreen = 1/4.f;
|
||||||
static float minAlpha = 0.f;
|
static float minAlpha = 0.f;
|
||||||
@ -316,7 +317,7 @@ static inline int64_t _tap_key_at_point(float x, float y) {
|
|||||||
|
|
||||||
case ICONTEXT_NONACTIONABLE:
|
case ICONTEXT_NONACTIONABLE:
|
||||||
scancode = 0;
|
scancode = 0;
|
||||||
handled = joydriver_isCalibrating()/* || keydriver_isCalibrating()*/;
|
handled = isCalibrating;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ICONTEXT_CTRL:
|
case ICONTEXT_CTRL:
|
||||||
@ -398,7 +399,7 @@ static inline int64_t _tap_key_at_point(float x, float y) {
|
|||||||
} else {
|
} else {
|
||||||
c_keys_handle_input(key, /*pressed:*/true, /*ASCII:*/true);
|
c_keys_handle_input(key, /*pressed:*/true, /*ASCII:*/true);
|
||||||
}
|
}
|
||||||
if (key == ' ' && (joydriver_isCalibrating()/* || keydriver_isCalibrating()*/)) {
|
if (key == ' ' && isCalibrating) {
|
||||||
key = ICONTEXT_SPACE_VISUAL;
|
key = ICONTEXT_SPACE_VISUAL;
|
||||||
}
|
}
|
||||||
} else if (isCTRL) {
|
} else if (isCTRL) {
|
||||||
@ -731,6 +732,16 @@ static bool gltouchkbd_ownsScreen(void) {
|
|||||||
return ownsScreen;
|
return ownsScreen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void gltouchkbd_beginCalibration(void) {
|
||||||
|
video_clear();
|
||||||
|
isCalibrating = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void gltouchkbd_endCalibration(void) {
|
||||||
|
video_redraw();
|
||||||
|
isCalibrating = false;
|
||||||
|
}
|
||||||
|
|
||||||
static void _animation_showTouchKeyboard(void) {
|
static void _animation_showTouchKeyboard(void) {
|
||||||
if (!isAvailable) {
|
if (!isAvailable) {
|
||||||
return;
|
return;
|
||||||
@ -759,6 +770,8 @@ static void _init_gltouchkbd(void) {
|
|||||||
keydriver_setTouchKeyboardEnabled = &gltouchkbd_setTouchKeyboardEnabled;
|
keydriver_setTouchKeyboardEnabled = &gltouchkbd_setTouchKeyboardEnabled;
|
||||||
keydriver_setTouchKeyboardOwnsScreen = &gltouchkbd_setTouchKeyboardOwnsScreen;
|
keydriver_setTouchKeyboardOwnsScreen = &gltouchkbd_setTouchKeyboardOwnsScreen;
|
||||||
keydriver_ownsScreen = &gltouchkbd_ownsScreen;
|
keydriver_ownsScreen = &gltouchkbd_ownsScreen;
|
||||||
|
keydriver_beginCalibration = &gltouchkbd_beginCalibration;
|
||||||
|
keydriver_endCalibration = &gltouchkbd_endCalibration;
|
||||||
|
|
||||||
kbd.selectedCol = -1;
|
kbd.selectedCol = -1;
|
||||||
kbd.selectedRow = -1;
|
kbd.selectedRow = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user