mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-06-18 03:29:31 +00:00
d63ba9538d
- Use a new activity and change to Intent.ACTION_SEND handler - Fixes an issue where email data was previously lost on a re-orientation event
496 lines
18 KiB
Java
496 lines
18 KiB
Java
/*
|
|
* Apple // emulator for *nix
|
|
*
|
|
* This software package is subject to the GNU General Public License
|
|
* version 3 or later (your choice) as published by the Free Software
|
|
* Foundation.
|
|
*
|
|
* Copyright 2015 Aaron Culliney
|
|
*
|
|
*/
|
|
|
|
package org.deadc0de.apple2ix;
|
|
|
|
import android.content.DialogInterface;
|
|
import android.content.Intent;
|
|
import android.net.Uri;
|
|
import androidx.appcompat.app.AlertDialog;
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
import android.widget.CheckBox;
|
|
import android.widget.CompoundButton;
|
|
|
|
import org.deadc0de.apple2ix.basic.BuildConfig;
|
|
import org.deadc0de.apple2ix.basic.R;
|
|
|
|
public class Apple2SettingsMenu extends Apple2AbstractMenu {
|
|
|
|
private final static String TAG = "Apple2SettingsMenu";
|
|
|
|
public Apple2SettingsMenu(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 true;
|
|
}
|
|
|
|
public enum TouchDeviceVariant {
|
|
NONE(0),
|
|
JOYSTICK(1),
|
|
JOYSTICK_KEYPAD(2),
|
|
KEYBOARD(3),
|
|
TOPMENU(4),
|
|
ALERT(5);
|
|
private int dev;
|
|
|
|
public static final TouchDeviceVariant FRAMEBUFFER = NONE;
|
|
|
|
public static final int size = TouchDeviceVariant.values().length;
|
|
|
|
TouchDeviceVariant(int dev) {
|
|
this.dev = dev;
|
|
}
|
|
|
|
static TouchDeviceVariant next(int ord) {
|
|
ord = (ord + 1) % size;
|
|
return TouchDeviceVariant.values()[ord];
|
|
}
|
|
}
|
|
|
|
enum SETTINGS implements Apple2AbstractMenu.IMenuEnum {
|
|
CURRENT_INPUT {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.input_current);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.input_current_summary);
|
|
}
|
|
|
|
@Override
|
|
public String getPrefDomain() {
|
|
return Apple2Preferences.PREF_DOMAIN_TOUCHSCREEN;
|
|
}
|
|
|
|
@Override
|
|
public String getPrefKey() {
|
|
return "screenOwner";
|
|
}
|
|
|
|
@Override
|
|
public Object getPrefDefault() {
|
|
return TouchDeviceVariant.KEYBOARD.ordinal();
|
|
}
|
|
|
|
@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) {
|
|
final IMenuEnum self = this;
|
|
_alertDialogHandleSelection(activity, R.string.input_current, new String[]{
|
|
activity.getResources().getString(R.string.joystick),
|
|
activity.getResources().getString(R.string.keypad),
|
|
activity.getResources().getString(R.string.keyboard),
|
|
}, new IPreferenceLoadSave() {
|
|
@Override
|
|
public int intValue() {
|
|
int val = (int) Apple2Preferences.getJSONPref(self);
|
|
return val - 1;
|
|
}
|
|
|
|
@Override
|
|
public void saveInt(int value) {
|
|
Apple2Preferences.setJSONPref(self, TouchDeviceVariant.values()[value].ordinal() + 1);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
VIDEO_CONFIGURE {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.video_configure);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.video_configure_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
new Apple2VideoSettingsMenu(activity).show();
|
|
}
|
|
},
|
|
JOYSTICK_CONFIGURE {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.joystick_configure);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.joystick_configure_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
new Apple2JoystickSettingsMenu(activity, Apple2SettingsMenu.TouchDeviceVariant.JOYSTICK).show();
|
|
}
|
|
},
|
|
KEYPAD_CONFIGURE {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.keypad_configure);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.keypad_configure_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
new Apple2KeypadSettingsMenu(activity, Apple2SettingsMenu.TouchDeviceVariant.JOYSTICK_KEYPAD).show();
|
|
}
|
|
},
|
|
KEYBOARD_CONFIGURE {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.keyboard_configure);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.keyboard_configure_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
new Apple2KeyboardSettingsMenu(activity).show();
|
|
}
|
|
},
|
|
AUDIO_CONFIGURE {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.audio_configure);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.audio_configure_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(Apple2Activity activity, Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
new Apple2AudioSettingsMenu(activity).show();
|
|
}
|
|
},
|
|
SHOW_DISK_OPERATIONS {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.disk_show_operation);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.disk_show_operation_summary);
|
|
}
|
|
|
|
@Override
|
|
public String getPrefKey() {
|
|
return "diskAnimationsEnabled";
|
|
}
|
|
|
|
@Override
|
|
public Object getPrefDefault() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public View getView(final Apple2Activity activity, View convertView) {
|
|
final IMenuEnum self = this;
|
|
convertView = _basicView(activity, this, convertView);
|
|
CheckBox cb = _addCheckbox(activity, this, convertView, (boolean) Apple2Preferences.getJSONPref(this));
|
|
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
Apple2Preferences.setJSONPref(self, isChecked);
|
|
}
|
|
});
|
|
return convertView;
|
|
}
|
|
},
|
|
FAST_DISK_OPERATIONS {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.disk_fast_operation);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.disk_fast_operation_summary);
|
|
}
|
|
|
|
@Override
|
|
public String getPrefKey() {
|
|
return "diskFastLoading";
|
|
}
|
|
|
|
@Override
|
|
public Object getPrefDefault() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public View getView(final Apple2Activity activity, View convertView) {
|
|
final IMenuEnum self = this;
|
|
convertView = _basicView(activity, this, convertView);
|
|
CheckBox cb = _addCheckbox(activity, this, convertView, (boolean) Apple2Preferences.getJSONPref(this));
|
|
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
Apple2Preferences.setJSONPref(self, isChecked);
|
|
}
|
|
});
|
|
return convertView;
|
|
}
|
|
},
|
|
RELEASE_NOTES {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.release_notes);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.release_notes_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
activity.showReleaseNotes();
|
|
}
|
|
},
|
|
ABOUT {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.about_apple2ix);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.about_apple2ix_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
String url = "https://deadc0de.org/apple2ix/android/";
|
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
i.setData(Uri.parse(url));
|
|
activity.startActivity(i);
|
|
}
|
|
},
|
|
LICENSES {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.about_apple2ix_licenses);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.about_apple2ix_licenses_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
String url = "https://deadc0de.org/apple2ix/licenses/";
|
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
i.setData(Uri.parse(url));
|
|
activity.startActivity(i);
|
|
}
|
|
},
|
|
RESET_PREFERENCES {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.preferences_reset_title);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.preferences_reset_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(activity).setIcon(R.drawable.ic_launcher).setCancelable(true).setTitle(R.string.preferences_reset_really).setMessage(R.string.preferences_reset_warning).setPositiveButton(R.string.reset, new DialogInterface.OnClickListener() {
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
dialog.dismiss();
|
|
Apple2Preferences.reset(activity);
|
|
}
|
|
});
|
|
AlertDialog dialog = builder.create();
|
|
activity.registerAndShowDialog(dialog);
|
|
}
|
|
},
|
|
EMAIL_LOGS {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.preferences_email_logs);
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
return activity.getResources().getString(R.string.preferences_email_logs_summary);
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
Apple2CrashHandler.getInstance().emailCrashesAndLogs(activity);
|
|
}
|
|
},
|
|
CRASH {
|
|
@Override
|
|
public final String getTitle(Apple2Activity activity) {
|
|
if (BuildConfig.DEBUG) {
|
|
// in debug mode we actually exercise the crash reporter ...
|
|
return activity.getResources().getString(R.string.crasher_title);
|
|
} else {
|
|
return activity.getResources().getString(R.string.crasher_check_title);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public final String getSummary(Apple2Activity activity) {
|
|
if (BuildConfig.DEBUG) {
|
|
return activity.getResources().getString(R.string.crasher_summary);
|
|
} else {
|
|
return activity.getResources().getString(R.string.crasher_check_summary);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getPrefKey() {
|
|
return "sendCrashReports";
|
|
}
|
|
|
|
@Override
|
|
public Object getPrefDefault() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public View getView(final Apple2Activity activity, View convertView) {
|
|
convertView = _basicView(activity, this, convertView);
|
|
if (!BuildConfig.DEBUG) {
|
|
CheckBox cb = _addCheckbox(activity, this, convertView, (boolean) Apple2Preferences.getJSONPref(this));
|
|
final IMenuEnum self = this;
|
|
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
|
@Override
|
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
|
Apple2Preferences.setJSONPref(self, isChecked);
|
|
}
|
|
});
|
|
}
|
|
return convertView;
|
|
}
|
|
|
|
@Override
|
|
public void handleSelection(final Apple2Activity activity, final Apple2AbstractMenu settingsMenu, boolean isChecked) {
|
|
|
|
if (BuildConfig.DEBUG) {
|
|
_alertDialogHandleSelection(activity, R.string.crasher, Apple2CrashHandler.CrashType.titles(activity), new IPreferenceLoadSave() {
|
|
@Override
|
|
public int intValue() {
|
|
return -1;
|
|
}
|
|
|
|
@Override
|
|
public void saveInt(int value) {
|
|
switch (value) {
|
|
case 0: {
|
|
final String[] str = new String[1];
|
|
str[0] = null;
|
|
activity.runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
Apple2Activity.logMessage(Apple2Activity.LogType.DEBUG, TAG, "About to NPE : " + str[0].length());
|
|
}
|
|
});
|
|
}
|
|
break;
|
|
|
|
default:
|
|
Apple2CrashHandler.getInstance().performCrash(value);
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
public static final int size = SETTINGS.values().length;
|
|
|
|
@Override
|
|
public String getPrefDomain() {
|
|
return Apple2Preferences.PREF_DOMAIN_INTERFACE;
|
|
}
|
|
|
|
@Override
|
|
public String getPrefKey() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Object getPrefDefault() {
|
|
return null;
|
|
}
|
|
|
|
@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;
|
|
}
|
|
}
|
|
}
|