From 59512809dbb06b262582e1190ac373cb4558cf54 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Tue, 24 Feb 2015 23:36:24 +0100 Subject: [PATCH] Added functionality to the settings section. --- .../de/vanitasvitae/enigmandroid/Enigma.java | 10 +- .../enigmandroid/MainActivity.java | 23 ++- .../enigmandroid/SettingsActivity.java | 160 +----------------- .../values-de/strings_activity_settings.xml | 13 ++ .../res/values/strings_activity_settings.xml | 2 +- app/src/main/res/xml/pref_headers.xml | 9 - app/src/main/res/xml/pref_page.xml | 12 ++ app/src/main/res/xml/pref_simulation.xml | 8 - 8 files changed, 59 insertions(+), 178 deletions(-) create mode 100644 app/src/main/res/values-de/strings_activity_settings.xml delete mode 100644 app/src/main/res/xml/pref_headers.xml create mode 100644 app/src/main/res/xml/pref_page.xml delete mode 100644 app/src/main/res/xml/pref_simulation.xml diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/Enigma.java b/app/src/main/java/de/vanitasvitae/enigmandroid/Enigma.java index 148691e..67c0a55 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/Enigma.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/Enigma.java @@ -16,7 +16,8 @@ public class Enigma private Rotor r3; //Slot for the reflector private Rotor reflector; - private boolean anomaly; + private boolean prefAnomaly; //Do you want to simulate the anomaly? + private boolean anomaly; //Is it time to spin twice? //Standard configuration (rotors 1-3, reflector B, all three rotors set to position 1, rings too) public static final int[] STANDARD_CONFIGURATION = {1, 2, 3, 2, 1, 1, 1, 0, 0, 0}; @@ -68,7 +69,7 @@ public class Enigma { //Rotate rotors r1.incrementCounter(); - if (r1.isAtTurnoverPosition() || this.anomaly) + if (r1.isAtTurnoverPosition() || (this.anomaly && prefAnomaly)) { r2.incrementCounter(); //Handle Anomaly @@ -367,6 +368,11 @@ public class Enigma return c; } + public void setPrefAnomaly(boolean b) + { + this.prefAnomaly = b; + } + public static class InvalidPlugboardConfigurationFormatException extends Exception { public InvalidPlugboardConfigurationFormatException(String m) diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java index eee9702..36a9ce4 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java @@ -4,7 +4,9 @@ import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.PreferenceManager; import android.view.View; import android.view.Menu; import android.view.MenuItem; @@ -26,9 +28,12 @@ public class MainActivity extends Activity private EditText input; private EditText output; + private static final int RESULT_SETTINGS = 1; + private Enigma enigma; //memory for the ringsettings private int[] ringsettings = {0,0,0}; + private boolean anomaly = true; @Override public void onCreate(Bundle savedInstanceState) @@ -75,7 +80,7 @@ public class MainActivity extends Activity else if (id == R.id.action_settings) { Intent i = new Intent(this, SettingsActivity.class); - startActivityForResult(i, 0); + startActivityForResult(i, RESULT_SETTINGS); } return super.onOptionsItemSelected(item); } @@ -121,6 +126,7 @@ public class MainActivity extends Activity { enigma.setConfiguration(conf); enigma.setPlugboard(plugboardConfiguration); + enigma.setPrefAnomaly(anomaly); } catch (Plugboard.PlugAlreadyUsedException e) { @@ -283,4 +289,19 @@ public class MainActivity extends Activity } }).show(); } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + switch (requestCode) { + case RESULT_SETTINGS: + { + SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); + boolean an = sharedPrefs.getBoolean("prefAnomaly", true); + System.out.println(an); + this.anomaly = an; + break; + } + } + } } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/SettingsActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/SettingsActivity.java index d9eb9f5..44da304 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/SettingsActivity.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/SettingsActivity.java @@ -1,24 +1,7 @@ package de.vanitasvitae.enigmandroid; -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.Configuration; -import android.media.Ringtone; -import android.media.RingtoneManager; -import android.net.Uri; -import android.os.Build; import android.os.Bundle; -import android.preference.ListPreference; -import android.preference.Preference; import android.preference.PreferenceActivity; -import android.preference.PreferenceCategory; -import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; -import android.preference.RingtonePreference; -import android.text.TextUtils; - - -import java.util.List; /** * A {@link PreferenceActivity} that presents a set of application settings. On @@ -33,149 +16,12 @@ import java.util.List; */ public class SettingsActivity extends PreferenceActivity { - /** - * Determines whether to always show the simplified settings UI, where - * settings are presented in a single list. When false, settings are shown - * as a master/detail two-pane view on tablets. When true, a single pane is - * shown on tablets. - */ - private static final boolean ALWAYS_SIMPLE_PREFS = false; - - @Override - protected void onPostCreate(Bundle savedInstanceState) + protected void onCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - - setupSimplePreferencesScreen(); + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.pref_page); } - /** - * Shows the simplified settings UI if the device configuration if the - * device configuration dictates that a simplified, single-pane UI should be - * shown. - */ - private void setupSimplePreferencesScreen() - { - if (!isSimplePreferences(this)) - { - return; - } - - // In the simplified UI, fragments are not used at all and we instead - // use the older PreferenceActivity APIs. - - // Add 'simulation' preferences. - addPreferencesFromResource(R.xml.pref_simulation); - - } - - /** - * {@inheritDoc} - */ - @Override - public boolean onIsMultiPane() - { - return isXLargeTablet(this) && !isSimplePreferences(this); - } - - /** - * Helper method to determine if the device has an extra-large screen. For - * example, 10" tablets are extra-large. - */ - private static boolean isXLargeTablet(Context context) - { - return (context.getResources().getConfiguration().screenLayout - & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; - } - - /** - * Determines whether the simplified settings UI should be shown. This is - * true if this is forced via {@link #ALWAYS_SIMPLE_PREFS}, or the device - * doesn't have newer APIs like {@link PreferenceFragment}, or the device - * doesn't have an extra-large screen. In these cases, a single-pane - * "simplified" settings UI should be shown. - */ - private static boolean isSimplePreferences(Context context) - { - return ALWAYS_SIMPLE_PREFS - || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB - || !isXLargeTablet(context); - } - - /** - * {@inheritDoc} - */ - @Override - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public void onBuildHeaders(List
target) - { - if (!isSimplePreferences(this)) - { - loadHeadersFromResource(R.xml.pref_headers, target); - } - } - - /** - * A preference value change listener that updates the preference's summary - * to reflect its new value. - */ - private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() - { - @Override - public boolean onPreferenceChange(Preference preference, Object value) - { - String stringValue = value.toString(); - // For all other preferences, set the summary to the value's - // simple string representation. - preference.setSummary(stringValue); - - return true; - } - }; - - /** - * Binds a preference's summary to its value. More specifically, when the - * preference's value is changed, its summary (line of text below the - * preference title) is updated to reflect the value. The summary is also - * immediately updated upon calling this method. The exact display format is - * dependent on the type of preference. - * - * @see #sBindPreferenceSummaryToValueListener - */ - private static void bindPreferenceSummaryToValue(Preference preference) - { - // Set the listener to watch for value changes. - preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); - - // Trigger the listener immediately with the preference's - // current value. - sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, - PreferenceManager - .getDefaultSharedPreferences(preference.getContext()) - .getString(preference.getKey(), "")); - } - - /** - * This fragment shows simulation preferences only. It is used when the - * activity is showing a two-pane settings UI. - */ - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - public static class SimulationPreferenceFragment extends PreferenceFragment - { - @Override - public void onCreate(Bundle savedInstanceState) - { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.pref_simulation); - - // Bind the summaries of EditText/List/Dialog/Ringtone preferences - // to their values. When their values change, their summaries are - // updated to reflect the new value, per the Android Design - // guidelines. - bindPreferenceSummaryToValue(findPreference("example_text")); - bindPreferenceSummaryToValue(findPreference("example_list")); - } - } } diff --git a/app/src/main/res/values-de/strings_activity_settings.xml b/app/src/main/res/values-de/strings_activity_settings.xml new file mode 100644 index 0000000..33373a9 --- /dev/null +++ b/app/src/main/res/values-de/strings_activity_settings.xml @@ -0,0 +1,13 @@ + + Einstellungen + + + + + Simulation + + Doppelschritt Anomalie + Die Doppelschritt Anomalie lässt die mittlere Walze zweimal rotieren, falls sie sich vor dem Übertragspunkt befindet. + + + diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index bcb6a47..20e7d9a 100644 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -8,7 +8,7 @@ Simulate Anomaly The double step anomaly causes the middle rotor - to rotate twice, if one step from turnover point. + to rotate twice, if it is one step before its turnover point. diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml deleted file mode 100644 index 00a087e..0000000 --- a/app/src/main/res/xml/pref_headers.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - -
- - diff --git a/app/src/main/res/xml/pref_page.xml b/app/src/main/res/xml/pref_page.xml new file mode 100644 index 0000000..727c065 --- /dev/null +++ b/app/src/main/res/xml/pref_page.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/pref_simulation.xml b/app/src/main/res/xml/pref_simulation.xml deleted file mode 100644 index 5b4d4a1..0000000 --- a/app/src/main/res/xml/pref_simulation.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - -