mirror of
https://github.com/vanitasvitae/EnigmAndroid.git
synced 2024-11-25 05:42:08 +01:00
Added functionality to the settings section.
This commit is contained in:
parent
40c0d7a18d
commit
59512809db
8 changed files with 59 additions and 178 deletions
|
@ -16,7 +16,8 @@ public class Enigma
|
||||||
private Rotor r3;
|
private Rotor r3;
|
||||||
//Slot for the reflector
|
//Slot for the reflector
|
||||||
private Rotor 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)
|
//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};
|
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
|
//Rotate rotors
|
||||||
r1.incrementCounter();
|
r1.incrementCounter();
|
||||||
if (r1.isAtTurnoverPosition() || this.anomaly)
|
if (r1.isAtTurnoverPosition() || (this.anomaly && prefAnomaly))
|
||||||
{
|
{
|
||||||
r2.incrementCounter();
|
r2.incrementCounter();
|
||||||
//Handle Anomaly
|
//Handle Anomaly
|
||||||
|
@ -367,6 +368,11 @@ public class Enigma
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPrefAnomaly(boolean b)
|
||||||
|
{
|
||||||
|
this.prefAnomaly = b;
|
||||||
|
}
|
||||||
|
|
||||||
public static class InvalidPlugboardConfigurationFormatException extends Exception
|
public static class InvalidPlugboardConfigurationFormatException extends Exception
|
||||||
{
|
{
|
||||||
public InvalidPlugboardConfigurationFormatException(String m)
|
public InvalidPlugboardConfigurationFormatException(String m)
|
||||||
|
|
|
@ -4,7 +4,9 @@ import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
@ -26,9 +28,12 @@ public class MainActivity extends Activity
|
||||||
private EditText input;
|
private EditText input;
|
||||||
private EditText output;
|
private EditText output;
|
||||||
|
|
||||||
|
private static final int RESULT_SETTINGS = 1;
|
||||||
|
|
||||||
private Enigma enigma;
|
private Enigma enigma;
|
||||||
//memory for the ringsettings
|
//memory for the ringsettings
|
||||||
private int[] ringsettings = {0,0,0};
|
private int[] ringsettings = {0,0,0};
|
||||||
|
private boolean anomaly = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState)
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
@ -75,7 +80,7 @@ public class MainActivity extends Activity
|
||||||
else if (id == R.id.action_settings)
|
else if (id == R.id.action_settings)
|
||||||
{
|
{
|
||||||
Intent i = new Intent(this, SettingsActivity.class);
|
Intent i = new Intent(this, SettingsActivity.class);
|
||||||
startActivityForResult(i, 0);
|
startActivityForResult(i, RESULT_SETTINGS);
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
@ -121,6 +126,7 @@ public class MainActivity extends Activity
|
||||||
{
|
{
|
||||||
enigma.setConfiguration(conf);
|
enigma.setConfiguration(conf);
|
||||||
enigma.setPlugboard(plugboardConfiguration);
|
enigma.setPlugboard(plugboardConfiguration);
|
||||||
|
enigma.setPrefAnomaly(anomaly);
|
||||||
|
|
||||||
} catch (Plugboard.PlugAlreadyUsedException e)
|
} catch (Plugboard.PlugAlreadyUsedException e)
|
||||||
{
|
{
|
||||||
|
@ -283,4 +289,19 @@ public class MainActivity extends Activity
|
||||||
}
|
}
|
||||||
}).show();
|
}).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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +1,7 @@
|
||||||
package de.vanitasvitae.enigmandroid;
|
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.os.Bundle;
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.PreferenceActivity;
|
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
|
* A {@link PreferenceActivity} that presents a set of application settings. On
|
||||||
|
@ -33,149 +16,12 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public class SettingsActivity extends PreferenceActivity
|
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
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
|
||||||
super.onPostCreate(savedInstanceState);
|
|
||||||
|
|
||||||
setupSimplePreferencesScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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<Header> 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);
|
super.onCreate(savedInstanceState);
|
||||||
addPreferencesFromResource(R.xml.pref_simulation);
|
addPreferencesFromResource(R.xml.pref_page);
|
||||||
|
|
||||||
// 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"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
13
app/src/main/res/values-de/strings_activity_settings.xml
Normal file
13
app/src/main/res/values-de/strings_activity_settings.xml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<resources>
|
||||||
|
<string name="title_activity_settings">Einstellungen</string>
|
||||||
|
|
||||||
|
<!-- Strings related to Settings -->
|
||||||
|
|
||||||
|
<!-- Settings for simulation -->
|
||||||
|
<string name="pref_header_simulation">Simulation</string>
|
||||||
|
|
||||||
|
<string name="pref_title_simulate_anomaly">Doppelschritt Anomalie</string>
|
||||||
|
<string name="pref_description_simulate_anomaly">Die Doppelschritt Anomalie lässt die mittlere Walze zweimal rotieren, falls sie sich vor dem Übertragspunkt befindet.
|
||||||
|
</string>
|
||||||
|
|
||||||
|
</resources>
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
<string name="pref_title_simulate_anomaly">Simulate Anomaly</string>
|
<string name="pref_title_simulate_anomaly">Simulate Anomaly</string>
|
||||||
<string name="pref_description_simulate_anomaly">The double step anomaly causes the middle rotor
|
<string name="pref_description_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.
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<!-- These settings headers are only used on tablets. -->
|
|
||||||
|
|
||||||
<header
|
|
||||||
android:fragment="de.vanitasvitae.enigmandroid.SettingsActivity$SimulationPreferenceFragment"
|
|
||||||
android:title="@string/pref_header_simulation"/>
|
|
||||||
|
|
||||||
</preference-headers>
|
|
12
app/src/main/res/xml/pref_page.xml
Normal file
12
app/src/main/res/xml/pref_page.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!--?xml version="1.0" encoding="utf-8"?-->
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<PreferenceCategory android:title="@string/pref_header_simulation">
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="prefAnomaly"
|
||||||
|
android:title="@string/pref_title_simulate_anomaly"
|
||||||
|
android:summary="@string/pref_description_simulate_anomaly"
|
||||||
|
android:defaultValue="true" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
|
@ -1,8 +0,0 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="example_checkbox"
|
|
||||||
android:title="@string/pref_title_simulate_anomaly"
|
|
||||||
android:summary="@string/pref_description_simulate_anomaly"
|
|
||||||
android:defaultValue="true" />
|
|
||||||
</PreferenceScreen>
|
|
Loading…
Reference in a new issue