mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-09-28 16:54:51 +00:00
Refactor GL Touch Joystick (PART II Java-is-not-native changes)
- Adds general key-tap-calibration callback to menus - Adds Touch Joystick Keypad settings menu including chooser and calibration
This commit is contained in:
parent
5c3791f5dc
commit
85407cfabb
@ -68,6 +68,10 @@ public abstract class Apple2AbstractMenu implements Apple2MenuView {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// required overrides ...
|
||||
|
||||
|
@ -57,17 +57,22 @@ public class Apple2Activity extends Activity {
|
||||
System.loadLibrary("apple2ix");
|
||||
}
|
||||
|
||||
public final static int NATIVE_TOUCH_HANDLED = (1 << 0);
|
||||
public final static int NATIVE_TOUCH_REQUEST_SHOW_MENU = (1 << 1);
|
||||
public final static long NATIVE_TOUCH_HANDLED = (1 << 0);
|
||||
public final static long NATIVE_TOUCH_REQUEST_SHOW_MENU = (1 << 1);
|
||||
|
||||
public final static int NATIVE_TOUCH_KEY_TAP = (1 << 4);
|
||||
public final static int NATIVE_TOUCH_KBD = (1 << 5);
|
||||
public final static int NATIVE_TOUCH_JOY = (1 << 6);
|
||||
public final static int NATIVE_TOUCH_MENU = (1 << 7);
|
||||
public final static long NATIVE_TOUCH_KEY_TAP = (1 << 4);
|
||||
public final static long NATIVE_TOUCH_KBD = (1 << 5);
|
||||
public final static long NATIVE_TOUCH_JOY = (1 << 6);
|
||||
public final static long NATIVE_TOUCH_MENU = (1 << 7);
|
||||
|
||||
public final static int NATIVE_TOUCH_INPUT_DEVICE_CHANGED = (1 << 16);
|
||||
public final static int NATIVE_TOUCH_CPU_SPEED_DEC = (1 << 17);
|
||||
public final static int NATIVE_TOUCH_CPU_SPEED_INC = (1 << 18);
|
||||
public final static long NATIVE_TOUCH_INPUT_DEVICE_CHANGED = (1 << 16);
|
||||
public final static long NATIVE_TOUCH_CPU_SPEED_DEC = (1 << 17);
|
||||
public final static long NATIVE_TOUCH_CPU_SPEED_INC = (1 << 18);
|
||||
|
||||
public final static long NATIVE_TOUCH_ASCII_SCANCODE_SHIFT = 32;
|
||||
public final static long NATIVE_TOUCH_ASCII_SCANCODE_MASK = 0xFFFFL;
|
||||
public final static long NATIVE_TOUCH_ASCII_MASK = 0xFF00L;
|
||||
public final static long NATIVE_TOUCH_SCANCODE_MASK = 0x00FFL;
|
||||
|
||||
private native void nativeOnCreate(String dataDir, int sampleRate, int monoBufferSize, int stereoBufferSize);
|
||||
|
||||
@ -339,6 +344,14 @@ public class Apple2Activity extends Activity {
|
||||
if (am != null) {
|
||||
am.playSoundEffect(AudioManager.FX_KEY_CLICK);
|
||||
}
|
||||
|
||||
if ((apple2MenuView != null) && apple2MenuView.isCalibrating()) {
|
||||
long asciiScancodeLong = nativeFlags & (NATIVE_TOUCH_ASCII_SCANCODE_MASK << NATIVE_TOUCH_ASCII_SCANCODE_SHIFT);
|
||||
int asciiInt = (int) (asciiScancodeLong >> (NATIVE_TOUCH_ASCII_SCANCODE_SHIFT + 8));
|
||||
int scancode = (int) ((asciiScancodeLong >> NATIVE_TOUCH_ASCII_SCANCODE_SHIFT) & 0xFFL);
|
||||
char ascii = (char) asciiInt;
|
||||
apple2MenuView.onKeyTapCalibrationEvent(ascii, scancode);
|
||||
}
|
||||
}
|
||||
|
||||
if ((nativeFlags & NATIVE_TOUCH_MENU) == 0) {
|
||||
@ -405,7 +418,7 @@ public class Apple2Activity extends Activity {
|
||||
if (mMainMenu != null) {
|
||||
Apple2SettingsMenu settingsMenu = mMainMenu.getSettingsMenu();
|
||||
Apple2DisksMenu disksMenu = mMainMenu.getDisksMenu();
|
||||
if (! (settingsMenu.isShowing() || disksMenu.isShowing()) ) {
|
||||
if (!(settingsMenu.isShowing() || disksMenu.isShowing())) {
|
||||
mMainMenu.show();
|
||||
}
|
||||
}
|
||||
|
@ -141,6 +141,10 @@ public class Apple2DisksMenu implements Apple2MenuView {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (isShowing()) {
|
||||
return;
|
||||
|
@ -78,6 +78,10 @@ public class Apple2JoystickCalibration implements Apple2MenuView {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (isShowing()) {
|
||||
return;
|
||||
|
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Apple // emulator for *nix
|
||||
*
|
||||
* This software package is subject to the GNU General Public License
|
||||
* version 2 or later (your choice) as published by the Free Software
|
||||
* Foundation.
|
||||
*
|
||||
* THERE ARE NO WARRANTIES WHATSOEVER.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.deadc0de.apple2ix;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
public class Apple2KeyboardSettingsMenu extends Apple2AbstractMenu {
|
||||
|
||||
private final static String TAG = "Apple2KeyboardSettingsMenu";
|
||||
|
||||
// These settings must match native side
|
||||
public final static int MOUSETEXT_BEGIN = 0x80;
|
||||
public final static int MOUSETEXT_CLOSEDAPPLE = MOUSETEXT_BEGIN/*+0x00*/;
|
||||
public final static int MOUSETEXT_OPENAPPLE = MOUSETEXT_BEGIN+0x01;
|
||||
public final static int MOUSETEXT_LEFT = MOUSETEXT_BEGIN+0x08;
|
||||
public final static int MOUSETEXT_UP = MOUSETEXT_BEGIN+0x0b;
|
||||
public final static int MOUSETEXT_DOWN = MOUSETEXT_BEGIN+0x0a;
|
||||
public final static int MOUSETEXT_RIGHT = MOUSETEXT_BEGIN+0x15;
|
||||
|
||||
public final static int ICONTEXT_BEGIN = 0xA0;
|
||||
public final static int ICONTEXT_VISUAL_SPACE = ICONTEXT_BEGIN + 0x11;
|
||||
public final static int ICONTEXT_KBD_BEGIN = ICONTEXT_BEGIN + 0x13;
|
||||
public final static int ICONTEXT_CTRL = ICONTEXT_KBD_BEGIN/* + 0x00*/;
|
||||
public final static int ICONTEXT_ESC = ICONTEXT_KBD_BEGIN + 0x09;
|
||||
public final static int ICONTEXT_RETURN = ICONTEXT_KBD_BEGIN + 0x0A;
|
||||
public final static int ICONTEXT_NONACTION = ICONTEXT_KBD_BEGIN + 0x0C;
|
||||
|
||||
public final static int SCANCODE_A = 30;
|
||||
public final static int SCANCODE_D = 32;
|
||||
public final static int SCANCODE_F = 33;
|
||||
public final static int SCANCODE_H = 35;
|
||||
public final static int SCANCODE_I = 23;
|
||||
public final static int SCANCODE_J = 36;
|
||||
public final static int SCANCODE_K = 37;
|
||||
public final static int SCANCODE_L = 38;
|
||||
public final static int SCANCODE_M = 50;
|
||||
public final static int SCANCODE_N = 49;
|
||||
public final static int SCANCODE_O = 24;
|
||||
public final static int SCANCODE_U = 22;
|
||||
public final static int SCANCODE_W = 17;
|
||||
public final static int SCANCODE_X = 45;
|
||||
public final static int SCANCODE_Y = 21;
|
||||
public final static int SCANCODE_Z = 44;
|
||||
public final static int SCANCODE_SPACE = 57;
|
||||
public final static int SCANCODE_UP = 103;
|
||||
public final static int SCANCODE_LEFT = 105;
|
||||
public final static int SCANCODE_RIGHT = 106;
|
||||
public final static int SCANCODE_DOWN = 108;
|
||||
public final static int SCANCODE_COMMA = 51;
|
||||
|
||||
public Apple2KeyboardSettingsMenu(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 true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isEnabled(int position) {
|
||||
if (position < 0 || position >= SETTINGS.size) {
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
||||
KEYBOARD_VISIBILITY {
|
||||
@Override
|
||||
public final String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keyboard_visibility);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getSummary(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keyboard_visibility_summary);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
||||
}
|
||||
};
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,285 @@
|
||||
/*
|
||||
* Apple // emulator for *nix
|
||||
*
|
||||
* This software package is subject to the GNU General Public License
|
||||
* version 2 or later (your choice) as published by the Free Software
|
||||
* Foundation.
|
||||
*
|
||||
* THERE ARE NO WARRANTIES WHATSOEVER.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.deadc0de.apple2ix;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Apple2KeypadChooser implements Apple2MenuView {
|
||||
|
||||
private final static String TAG = "Apple2KeypadChooser";
|
||||
|
||||
private Apple2Activity mActivity = null;
|
||||
private View mSettingsView = null;
|
||||
private ArrayList<Apple2MenuView> mViewStack = null;
|
||||
private TextView mTextViewAxisChosenKeys = null;
|
||||
private TextView mTextViewButtonsChosenKeys = null;
|
||||
|
||||
private STATE_MACHINE mChooserState = STATE_MACHINE.CHOOSE_NORTHWEST;
|
||||
|
||||
private boolean mTouchMenuEnabled = false;
|
||||
private int mSavedTouchDevice = Apple2Preferences.TouchDeviceVariant.NONE.ordinal();
|
||||
|
||||
public Apple2KeypadChooser(Apple2Activity activity, ArrayList<Apple2MenuView> viewStack) {
|
||||
mActivity = activity;
|
||||
mViewStack = viewStack;
|
||||
setup();
|
||||
}
|
||||
|
||||
public final boolean isCalibrating() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode) {
|
||||
if (ascii == Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION) {
|
||||
scancode = -1;
|
||||
}
|
||||
if (scancode == 0) {
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "ascii:'" + asciiRepresentation(ascii) + "' scancode:" + scancode);
|
||||
mChooserState.setValues(mActivity, ascii, scancode);
|
||||
mChooserState = mChooserState.next();
|
||||
|
||||
mTextViewAxisChosenKeys.setText(getConfiguredAxisString());
|
||||
mTextViewButtonsChosenKeys.setText(getConfiguredButtonsString());
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (isShowing()) {
|
||||
return;
|
||||
}
|
||||
mActivity.pushApple2View(this);
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
for (Apple2MenuView apple2MenuView : mViewStack) {
|
||||
if (apple2MenuView != this) {
|
||||
mActivity.pushApple2View(apple2MenuView);
|
||||
}
|
||||
}
|
||||
|
||||
Apple2Preferences.nativeSetTouchMenuEnabled(mTouchMenuEnabled);
|
||||
Apple2Preferences.nativeSetCurrentTouchDevice(mSavedTouchDevice);
|
||||
Apple2Preferences.nativeTouchJoystickEndCalibrationMode(); // FIXME TODO : this should set not-joystick, not-keyboard, but keypad emulation
|
||||
|
||||
mActivity.popApple2View(this);
|
||||
}
|
||||
|
||||
public void dismissAll() {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
public boolean isShowing() {
|
||||
return mSettingsView.isShown();
|
||||
}
|
||||
|
||||
public View getView() {
|
||||
return mSettingsView;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// internals
|
||||
|
||||
private void setup() {
|
||||
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
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)
|
||||
|
||||
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...
|
||||
mTouchMenuEnabled = Apple2Preferences.TOUCH_MENU_ENABLED.booleanValue(mActivity);
|
||||
Apple2Preferences.nativeSetTouchMenuEnabled(false);
|
||||
mSavedTouchDevice = Apple2Preferences.CURRENT_TOUCH_DEVICE.intValue(mActivity);
|
||||
Apple2Preferences.nativeSetCurrentTouchDevice(Apple2Preferences.TouchDeviceVariant.KEYBOARD.ordinal());
|
||||
|
||||
Apple2Preferences.nativeTouchJoystickBeginCalibrationMode(); // FIXME TODO : this should set not-joystick, not-keyboard, but keypad emulation
|
||||
}
|
||||
|
||||
private String asciiRepresentation(char ascii) {
|
||||
switch (ascii) {
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_OPENAPPLE:
|
||||
return mActivity.getResources().getString(R.string.key_open_apple);
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_CLOSEDAPPLE:
|
||||
return mActivity.getResources().getString(R.string.key_closed_apple);
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_UP:
|
||||
return mActivity.getResources().getString(R.string.key_up);
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT:
|
||||
return mActivity.getResources().getString(R.string.key_left);
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT:
|
||||
return mActivity.getResources().getString(R.string.key_right);
|
||||
case Apple2KeyboardSettingsMenu.MOUSETEXT_DOWN:
|
||||
return mActivity.getResources().getString(R.string.key_down);
|
||||
case Apple2KeyboardSettingsMenu.ICONTEXT_CTRL:
|
||||
return mActivity.getResources().getString(R.string.key_ctrl);
|
||||
case Apple2KeyboardSettingsMenu.ICONTEXT_ESC:
|
||||
return mActivity.getResources().getString(R.string.key_esc);
|
||||
case Apple2KeyboardSettingsMenu.ICONTEXT_RETURN:
|
||||
return mActivity.getResources().getString(R.string.key_ret);
|
||||
case Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION:
|
||||
return mActivity.getResources().getString(R.string.key_none);
|
||||
case ' ':
|
||||
case Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE:
|
||||
return mActivity.getResources().getString(R.string.key_space);
|
||||
default:
|
||||
return "" + ascii;
|
||||
}
|
||||
}
|
||||
|
||||
private String getConfiguredAxisString() {
|
||||
StringBuilder configuredAxes = new StringBuilder();
|
||||
configuredAxes.append(mActivity.getResources().getString(R.string.keypad_chosen_axis_keys));
|
||||
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 {
|
||||
CHOOSE_NORTHWEST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_NORTH {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_NORTHEAST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_WEST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_CENTER {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_EAST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_SOUTHWEST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_SOUTH {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_SOUTHEAST {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_TAP {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_SWIPEUP {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
},
|
||||
CHOOSE_SWIPEDOWN {
|
||||
@Override
|
||||
public void setValues(Apple2Activity activity, char ascii, int scancode) {
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, ascii, scancode);
|
||||
}
|
||||
};
|
||||
|
||||
public static final int size = STATE_MACHINE.values().length;
|
||||
|
||||
public abstract void setValues(Apple2Activity activity, char ascii, int scancode);
|
||||
|
||||
public STATE_MACHINE next() {
|
||||
int nextOrd = this.ordinal() + 1;
|
||||
if (nextOrd >= size) {
|
||||
nextOrd = 0;
|
||||
}
|
||||
STATE_MACHINE nextState = STATE_MACHINE.values()[nextOrd];
|
||||
return nextState;
|
||||
}
|
||||
}
|
||||
}
|
@ -12,9 +12,6 @@
|
||||
package org.deadc0de.apple2ix;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ -50,7 +47,7 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
||||
}
|
||||
|
||||
enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
||||
KEYPAD_CHOOSE_BUTTONS {
|
||||
KEYPAD_CHOOSE_KEYS {
|
||||
@Override
|
||||
public final String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_choose);
|
||||
@ -61,30 +58,35 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
||||
return activity.getResources().getString(R.string.keypad_choose_summary);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final View getView(final Apple2Activity activity, View convertView) {
|
||||
convertView = _basicView(activity, this, convertView);
|
||||
_addPopupIcon(activity, this, convertView);
|
||||
return convertView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
||||
ArrayList<Apple2MenuView> viewStack = new ArrayList<>();
|
||||
{
|
||||
int idx = 0;
|
||||
while (true) {
|
||||
Apple2MenuView apple2MenuView = activity.peekApple2View(idx);
|
||||
if (apple2MenuView == null) {
|
||||
break;
|
||||
}
|
||||
viewStack.add(apple2MenuView);
|
||||
++idx;
|
||||
String[] titles = new String[Apple2Preferences.KeypadPreset.size + 1];
|
||||
titles[0] = activity.getResources().getString(R.string.keypad_preset_custom);
|
||||
System.arraycopy(Apple2Preferences.KeypadPreset.titles(activity), 0, titles, 1, Apple2Preferences.KeypadPreset.size);
|
||||
|
||||
_alertDialogHandleSelection(activity, R.string.keypad_choose_title, titles, new IPreferenceLoadSave() {
|
||||
@Override
|
||||
public int intValue() {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
Apple2KeypadChooser chooser = new Apple2KeypadChooser(activity, viewStack);
|
||||
|
||||
// show this new view...
|
||||
chooser.show();
|
||||
|
||||
// ...with nothing else underneath 'cept the emulator OpenGL layer
|
||||
for (Apple2MenuView apple2MenuView : viewStack) {
|
||||
activity.popApple2View(apple2MenuView);
|
||||
}
|
||||
@Override
|
||||
public void saveInt(int value) {
|
||||
if (value == 0) {
|
||||
Apple2KeypadSettingsMenu keypadSettingsMenu = (Apple2KeypadSettingsMenu) settingsMenu;
|
||||
keypadSettingsMenu.chooseKeys(activity);
|
||||
} else {
|
||||
Apple2Preferences.KeypadPreset.values()[value - 1].apply(activity);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
KEYPAD_CALIBRATE {
|
||||
@ -146,4 +148,32 @@ public class Apple2KeypadSettingsMenu extends Apple2AbstractMenu {
|
||||
return titles;
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// internals
|
||||
|
||||
private void chooseKeys(Apple2Activity activity) {
|
||||
ArrayList<Apple2MenuView> viewStack = new ArrayList<>();
|
||||
{
|
||||
int idx = 0;
|
||||
while (true) {
|
||||
Apple2MenuView apple2MenuView = activity.peekApple2View(idx);
|
||||
if (apple2MenuView == null) {
|
||||
break;
|
||||
}
|
||||
viewStack.add(apple2MenuView);
|
||||
++idx;
|
||||
}
|
||||
}
|
||||
|
||||
Apple2KeypadChooser chooser = new Apple2KeypadChooser(activity, viewStack);
|
||||
|
||||
// show this new view...
|
||||
chooser.show();
|
||||
|
||||
// ...with nothing else underneath 'cept the emulator OpenGL layer
|
||||
for (Apple2MenuView apple2MenuView : viewStack) {
|
||||
activity.popApple2View(apple2MenuView);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,4 +26,6 @@ public interface Apple2MenuView {
|
||||
public View getView();
|
||||
|
||||
public boolean isCalibrating();
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode);
|
||||
}
|
||||
|
@ -14,9 +14,6 @@ package org.deadc0de.apple2ix;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public enum Apple2Preferences {
|
||||
ASSETS_CONFIGURED {
|
||||
@ -181,7 +178,21 @@ public enum Apple2Preferences {
|
||||
CURRENT_TOUCH_DEVICE {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
nativeSetCurrentTouchDevice(intValue(activity));
|
||||
int intVariant = intValue(activity);
|
||||
nativeSetCurrentTouchDevice(intVariant);
|
||||
TouchDeviceVariant variant = TouchDeviceVariant.values()[intVariant];
|
||||
switch (variant) {
|
||||
case JOYSTICK:
|
||||
loadAllJoystickButtons(activity);
|
||||
break;
|
||||
case JOYSTICK_KEYPAD:
|
||||
loadAllKeypadKeys(activity);
|
||||
break;
|
||||
case KEYBOARD:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -257,7 +268,7 @@ public enum Apple2Preferences {
|
||||
JOYSTICK_TAP_BUTTON {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
nativeSetTouchJoystickButtonTypes(JOYSTICK_TAP_BUTTON.intValue(activity), JOYSTICK_SWIPEUP_BUTTON.intValue(activity), JOYSTICK_SWIPEDOWN_BUTTON.intValue(activity));
|
||||
loadAllJoystickButtons(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -274,14 +285,14 @@ public enum Apple2Preferences {
|
||||
|
||||
@Override
|
||||
public int intValue(Apple2Activity activity) {
|
||||
int defaultLatency = 2; // /TAPDELAY_NUM_CHOICES * TAPDELAY_SCALE -> 0.05f
|
||||
int defaultLatency = 3; // /TAPDELAY_NUM_CHOICES * TAPDELAY_SCALE -> 0.075f
|
||||
return activity.getPreferences(Context.MODE_PRIVATE).getInt(toString(), defaultLatency);
|
||||
}
|
||||
},
|
||||
JOYSTICK_SWIPEUP_BUTTON {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
nativeSetTouchJoystickButtonTypes(JOYSTICK_TAP_BUTTON.intValue(activity), JOYSTICK_SWIPEUP_BUTTON.intValue(activity), JOYSTICK_SWIPEDOWN_BUTTON.intValue(activity));
|
||||
loadAllJoystickButtons(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -292,7 +303,7 @@ public enum Apple2Preferences {
|
||||
JOYSTICK_SWIPEDOWN_BUTTON {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
nativeSetTouchJoystickButtonTypes(JOYSTICK_TAP_BUTTON.intValue(activity), JOYSTICK_SWIPEUP_BUTTON.intValue(activity), JOYSTICK_SWIPEDOWN_BUTTON.intValue(activity));
|
||||
loadAllJoystickButtons(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -320,7 +331,79 @@ public enum Apple2Preferences {
|
||||
|
||||
@Override
|
||||
public int intValue(Apple2Activity activity) {
|
||||
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_NORTHWEST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_NORTH_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_NORTHEAST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_WEST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_CENTER_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_EAST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_SOUTHWEST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_SOUTH_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_SOUTHEAST_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_TAP_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_SWIPEUP_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
},
|
||||
KEYPAD_SWIPEDOWN_KEY {
|
||||
@Override
|
||||
public void load(Apple2Activity activity) {
|
||||
loadAllKeypadKeys(activity);
|
||||
}
|
||||
};
|
||||
|
||||
@ -375,16 +458,155 @@ public enum Apple2Preferences {
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void load(Apple2Activity activity);
|
||||
|
||||
protected void warnError(Apple2Activity activity, int titleId, int mesgId) {
|
||||
AlertDialog dialog = new AlertDialog.Builder(activity).setIcon(R.drawable.ic_launcher).setCancelable(true).setTitle(titleId).setMessage(mesgId).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
public enum KeypadPreset {
|
||||
ARROWS_SPACE {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_arrows_space);
|
||||
}
|
||||
}).create();
|
||||
dialog.show();
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_UP, Apple2KeyboardSettingsMenu.SCANCODE_UP);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT, Apple2KeyboardSettingsMenu.SCANCODE_LEFT);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT, Apple2KeyboardSettingsMenu.SCANCODE_RIGHT);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_DOWN, Apple2KeyboardSettingsMenu.SCANCODE_DOWN);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
}
|
||||
},
|
||||
AZ_LEFT_RIGHT_SPACE {
|
||||
@Override
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_az_left_right_space);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) 'A', Apple2KeyboardSettingsMenu.SCANCODE_A);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT, Apple2KeyboardSettingsMenu.SCANCODE_LEFT);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT, Apple2KeyboardSettingsMenu.SCANCODE_RIGHT);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) 'Z', Apple2KeyboardSettingsMenu.SCANCODE_Z);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
}
|
||||
},
|
||||
LEFT_RIGHT_SPACE {
|
||||
@Override
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_left_right_space);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_LEFT, Apple2KeyboardSettingsMenu.SCANCODE_LEFT);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.MOUSETEXT_RIGHT, Apple2KeyboardSettingsMenu.SCANCODE_RIGHT);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
}
|
||||
},
|
||||
IJKM_SPACE {
|
||||
@Override
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_ijkm_space);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) 'I', Apple2KeyboardSettingsMenu.SCANCODE_I);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) 'J', Apple2KeyboardSettingsMenu.SCANCODE_J);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) 'K', Apple2KeyboardSettingsMenu.SCANCODE_K);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) 'M', Apple2KeyboardSettingsMenu.SCANCODE_M);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
}
|
||||
},
|
||||
WADX_SPACE {
|
||||
@Override
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_wadx_space);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) 'W', Apple2KeyboardSettingsMenu.SCANCODE_W);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) 'A', Apple2KeyboardSettingsMenu.SCANCODE_A);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) 'D', Apple2KeyboardSettingsMenu.SCANCODE_D);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) 'X', Apple2KeyboardSettingsMenu.SCANCODE_X);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_NONACTION, -1);
|
||||
}
|
||||
},
|
||||
CRAZY_SEAFOX_KEYS {
|
||||
@Override
|
||||
public String getTitle(Apple2Activity activity) {
|
||||
return activity.getResources().getString(R.string.keypad_preset_crazy_seafox);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Apple2Activity activity) {
|
||||
// Heh, the entire purpose of the keypad-variant touch joystick is to make this possible ;-)
|
||||
Apple2Preferences.KEYPAD_NORTHWEST_KEY.saveChosenKey(activity, (char) 'Y', Apple2KeyboardSettingsMenu.SCANCODE_Y);
|
||||
Apple2Preferences.KEYPAD_NORTH_KEY.saveChosenKey(activity, (char) 'U', Apple2KeyboardSettingsMenu.SCANCODE_U);
|
||||
Apple2Preferences.KEYPAD_NORTHEAST_KEY.saveChosenKey(activity, (char) 'I', Apple2KeyboardSettingsMenu.SCANCODE_I);
|
||||
Apple2Preferences.KEYPAD_WEST_KEY.saveChosenKey(activity, (char) 'H', Apple2KeyboardSettingsMenu.SCANCODE_H);
|
||||
Apple2Preferences.KEYPAD_CENTER_KEY.saveChosenKey(activity, (char) 'J', Apple2KeyboardSettingsMenu.SCANCODE_J);
|
||||
Apple2Preferences.KEYPAD_EAST_KEY.saveChosenKey(activity, (char) 'K', Apple2KeyboardSettingsMenu.SCANCODE_K);
|
||||
Apple2Preferences.KEYPAD_SOUTHWEST_KEY.saveChosenKey(activity, (char) 'N', Apple2KeyboardSettingsMenu.SCANCODE_N);
|
||||
Apple2Preferences.KEYPAD_SOUTH_KEY.saveChosenKey(activity, (char) 'M', Apple2KeyboardSettingsMenu.SCANCODE_M);
|
||||
Apple2Preferences.KEYPAD_SOUTHEAST_KEY.saveChosenKey(activity, (char) ',', Apple2KeyboardSettingsMenu.SCANCODE_COMMA);
|
||||
Apple2Preferences.KEYPAD_TAP_KEY.saveChosenKey(activity, (char) 'D', Apple2KeyboardSettingsMenu.SCANCODE_D);
|
||||
Apple2Preferences.KEYPAD_SWIPEDOWN_KEY.saveChosenKey(activity, (char) 'F', Apple2KeyboardSettingsMenu.SCANCODE_F);
|
||||
Apple2Preferences.KEYPAD_SWIPEUP_KEY.saveChosenKey(activity, (char) Apple2KeyboardSettingsMenu.ICONTEXT_VISUAL_SPACE, Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
}
|
||||
};
|
||||
|
||||
public abstract String getTitle(Apple2Activity activity);
|
||||
|
||||
public abstract void apply(Apple2Activity activity);
|
||||
|
||||
public static final int size = KeypadPreset.values().length;
|
||||
|
||||
public static String[] titles(Apple2Activity activity) {
|
||||
String[] titles = new String[size];
|
||||
int i = 0;
|
||||
for (KeypadPreset preset : values()) {
|
||||
titles[i++] = preset.getTitle(activity);
|
||||
}
|
||||
return titles;
|
||||
}
|
||||
}
|
||||
|
||||
public final static int DECENT_AMOUNT_OF_CHOICES = 20;
|
||||
@ -450,6 +672,12 @@ public enum Apple2Preferences {
|
||||
load(activity);
|
||||
}
|
||||
|
||||
public void saveChosenKey(Apple2Activity activity, char ascii, int scancode) {
|
||||
activity.getPreferences(Context.MODE_PRIVATE).edit().putInt(asciiString(), ascii).apply();
|
||||
activity.getPreferences(Context.MODE_PRIVATE).edit().putInt(scancodeString(), scancode).apply();
|
||||
load(activity);
|
||||
}
|
||||
|
||||
// accessors
|
||||
|
||||
public boolean booleanValue(Apple2Activity activity) {
|
||||
@ -468,6 +696,14 @@ public enum Apple2Preferences {
|
||||
return activity.getPreferences(Context.MODE_PRIVATE).getString(toString(), null);
|
||||
}
|
||||
|
||||
public char asciiValue(Apple2Activity activity) {
|
||||
return (char) activity.getPreferences(Context.MODE_PRIVATE).getInt(asciiString(), ' ');
|
||||
}
|
||||
|
||||
public int scancodeValue(Apple2Activity activity) {
|
||||
return activity.getPreferences(Context.MODE_PRIVATE).getInt(scancodeString(), Apple2KeyboardSettingsMenu.SCANCODE_SPACE);
|
||||
}
|
||||
|
||||
public static void loadPreferences(Apple2Activity activity) {
|
||||
for (Apple2Preferences pref : Apple2Preferences.values()) {
|
||||
pref.load(activity);
|
||||
@ -479,6 +715,72 @@ public enum Apple2Preferences {
|
||||
loadPreferences(activity);
|
||||
}
|
||||
|
||||
public String asciiString() {
|
||||
return toString() + "_ASCII";
|
||||
}
|
||||
|
||||
public String scancodeString() {
|
||||
return toString() + "_SCAN";
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// internals ...
|
||||
|
||||
protected abstract void load(Apple2Activity activity);
|
||||
|
||||
protected static void warnError(Apple2Activity activity, int titleId, int mesgId) {
|
||||
AlertDialog dialog = new AlertDialog.Builder(activity).setIcon(R.drawable.ic_launcher).setCancelable(true).setTitle(titleId).setMessage(mesgId).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
}).create();
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
protected static void loadAllKeypadKeys(Apple2Activity activity) {
|
||||
int[] rosetteChars = new int[]{
|
||||
KEYPAD_NORTHWEST_KEY.asciiValue(activity),
|
||||
KEYPAD_NORTH_KEY.asciiValue(activity),
|
||||
KEYPAD_NORTHEAST_KEY.asciiValue(activity),
|
||||
KEYPAD_WEST_KEY.asciiValue(activity),
|
||||
KEYPAD_CENTER_KEY.asciiValue(activity),
|
||||
KEYPAD_EAST_KEY.asciiValue(activity),
|
||||
KEYPAD_SOUTHWEST_KEY.asciiValue(activity),
|
||||
KEYPAD_SOUTH_KEY.asciiValue(activity),
|
||||
KEYPAD_SOUTHEAST_KEY.asciiValue(activity),
|
||||
};
|
||||
int[] rosetteScancodes = new int[]{
|
||||
KEYPAD_NORTHWEST_KEY.scancodeValue(activity),
|
||||
KEYPAD_NORTH_KEY.scancodeValue(activity),
|
||||
KEYPAD_NORTHEAST_KEY.scancodeValue(activity),
|
||||
KEYPAD_WEST_KEY.scancodeValue(activity),
|
||||
KEYPAD_CENTER_KEY.scancodeValue(activity),
|
||||
KEYPAD_EAST_KEY.scancodeValue(activity),
|
||||
KEYPAD_SOUTHWEST_KEY.scancodeValue(activity),
|
||||
KEYPAD_SOUTH_KEY.scancodeValue(activity),
|
||||
KEYPAD_SOUTHEAST_KEY.scancodeValue(activity),
|
||||
};
|
||||
int[] buttonsChars = new int[]{
|
||||
KEYPAD_TAP_KEY.asciiValue(activity),
|
||||
KEYPAD_SWIPEUP_KEY.asciiValue(activity),
|
||||
KEYPAD_SWIPEDOWN_KEY.asciiValue(activity),
|
||||
};
|
||||
int[] buttonsScancodes = new int[]{
|
||||
KEYPAD_TAP_KEY.scancodeValue(activity),
|
||||
KEYPAD_SWIPEUP_KEY.scancodeValue(activity),
|
||||
KEYPAD_SWIPEDOWN_KEY.scancodeValue(activity),
|
||||
};
|
||||
nativeTouchJoystickSetKeypadTypes(rosetteChars, rosetteScancodes, buttonsChars, buttonsScancodes);
|
||||
}
|
||||
|
||||
protected static void loadAllJoystickButtons(Apple2Activity activity) {
|
||||
nativeSetTouchJoystickButtonTypes(
|
||||
JOYSTICK_TAP_BUTTON.intValue(activity),
|
||||
JOYSTICK_SWIPEUP_BUTTON.intValue(activity),
|
||||
JOYSTICK_SWIPEDOWN_BUTTON.intValue(activity));
|
||||
}
|
||||
|
||||
// native hooks
|
||||
|
||||
private static native void nativeSetColor(int color);
|
||||
@ -520,4 +822,7 @@ public enum Apple2Preferences {
|
||||
public static native void nativeTouchJoystickBeginCalibrationMode();
|
||||
|
||||
public static native void nativeTouchJoystickEndCalibrationMode();
|
||||
|
||||
private static native void nativeTouchJoystickSetKeypadTypes(int[] rosetteChars, int[] rosetteScancodes, int[] buttonsChars, int[] buttonsScancodes);
|
||||
|
||||
}
|
||||
|
@ -57,6 +57,10 @@ public class Apple2SplashScreen implements Apple2MenuView {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onKeyTapCalibrationEvent(char ascii, int scancode) {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (isShowing()) {
|
||||
return;
|
||||
|
31
Android/app/src/main/res/layout/activity_chooser_keypad.xml
Normal file
31
Android/app/src/main/res/layout/activity_chooser_keypad.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="0dp"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginRight="0dp"
|
||||
android:layout_marginEnd="0dp"
|
||||
android:layout_marginTop="0dp"
|
||||
android:layout_marginBottom="0dp"
|
||||
android:layout_weight="1"
|
||||
android:background="#00ff0000">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/keypad_chosen_axis_keys"
|
||||
android:id="@+id/textViewAxisChosenKeys"
|
||||
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_alignParentStart="true" />
|
||||
|
||||
</RelativeLayout>
|
@ -58,15 +58,46 @@
|
||||
<string name="joystick_current_summary">Emulated physical joystick or keypad</string>
|
||||
<string name="joystick_axisleft">Joystick/keypad axis on left</string>
|
||||
<string name="joystick_axisleft_summary">Joystick/keypad axis on left (buttons on right)</string>
|
||||
<string name="key_closed_apple">[ClosedApple]</string>
|
||||
<string name="key_ctrl">[Ctrl]</string>
|
||||
<string name="key_down">↓</string>
|
||||
<string name="key_esc">[ESC]</string>
|
||||
<string name="key_left">←</string>
|
||||
<string name="key_none">[None]</string>
|
||||
<string name="key_open_apple">[OpenApple]</string>
|
||||
<string name="key_ret">[Return]</string>
|
||||
<string name="key_right">→</string>
|
||||
<string name="key_space">[Space]</string>
|
||||
<string name="key_up">↑</string>
|
||||
<string name="keypad">Keypad Joystick</string>
|
||||
<string name="keypadA">Touch Keypad Joystick</string>
|
||||
<string name="keypad_button_tap_button">Tap key:</string>
|
||||
<string name="keypad_button_swipe_up_button">Swipe up key:</string>
|
||||
<string name="keypad_button_swipe_down_button">Swipe down key:</string>
|
||||
<string name="keypad_calibrate">Calibrate…</string>
|
||||
<string name="keypad_calibrate_summary">Configure and test current settings</string>
|
||||
<string name="keypad_choose">Choose 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_title">Axis & buttons</string>
|
||||
<string name="keypad_chosen_axis_keys">Chosen axis keys: </string>
|
||||
<string name="keypad_chosen_buttons_keys">Chosen buttons keys: </string>
|
||||
<string name="keypad_configure">Configure keypad joystick…</string>
|
||||
<string name="keypad_configure_summary">Axis touch/tilt, buttons, etc</string>
|
||||
<string name="keypad_threshold_summary">Keypad sensitivity threshold</string>
|
||||
<string name="keypad_key_axis_up">Up</string>
|
||||
<string name="keypad_key_axis_down">Down</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_swipeup">Swipe Up</string>
|
||||
<string name="keypad_key_button_swipedown">Swipe Down</string>
|
||||
<string name="keypad_preset_crazy_seafox">Seafox keys ;-)…</string>
|
||||
<string name="keypad_preset_custom">Choose custom…</string>
|
||||
<string name="keypad_preset_arrows_space">↑,←,→,↓, tap spacebar</string>
|
||||
<string name="keypad_preset_az_left_right_space">A,Z,←,→, tap spacebar</string>
|
||||
<string name="keypad_preset_ijkl_uo">I,J,L,K, tap U, swipe down O</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_wadx_space">W,A,D,X, tap spacebar</string>
|
||||
<string name="keyboard">Keyboard</string>
|
||||
<string name="keyboard_configure">Configure keyboard…</string>
|
||||
<string name="keyboard_configure_summary">Transparency, fading, custom keys</string>
|
||||
|
Loading…
Reference in New Issue
Block a user