diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index f6adf77..5fcb20b 100755
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -12,10 +12,10 @@ v0.1.8-not-yet-released<
*Added different colors to the plugboard-/pluggable reflector dialog. This helps to differentiate connections.
*Reworked InputPreparer using decorator pattern and added options to customize input preparation
*Reworked Reflector-/Rotor creation/management
+*Added Button to set the Enigma into a random configuration
*TODO: Add Enigma Z (Probably wont happen due to lack of information :/)
*TODO: Add multi-Enigma (select any rotor/reflector etc. Probably wont happen too soon)
-*TODO: Button to set the Enigma into a random configuration
-*TODO: Enigma configuration from seed (text or qr code)
+*TODO: Enigma configuration from/to seed (text or qr code)
v0.1.7-15.09.2015<
*Added Enigma K
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java
index 4809070..91b7454 100755
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java
@@ -287,6 +287,14 @@ public class MainActivity extends Activity
Toast.LENGTH_SHORT).show();
return true;
}
+ else if (id == R.id.action_random_configuration)
+ {
+ layoutContainer.getEnigma().randomState();
+ layoutContainer.setLayoutState(layoutContainer.getEnigma().getState());
+ Toast.makeText(getApplicationContext(), R.string.message_random,
+ Toast.LENGTH_SHORT).show();
+ return true;
+ }
else if (id == R.id.action_choose_ringstellung)
{
layoutContainer.showRingSettingsDialog();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java
index 2b99936..0aaa148 100755
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma.java
@@ -65,6 +65,13 @@ public abstract class Enigma
*/
public abstract void nextState();
+ /**
+ * Set the enigma to a random state.
+ * Don not choose a rotor twice, set random rotations, ringSettings, ukw and possibly
+ * plugboard / rewirable ukw configurations.
+ */
+ public abstract void randomState();
+
/**
* Substitute char k by sending the signal through the enigma.
* The signal passes the plugboard, the rotors and returns back after going through the
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java
index 19bf136..e1beb4f 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_D.java
@@ -1,10 +1,14 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
/**
- * Concrete implementation of an enigma machine of type I
+ * Concrete implementation of an enigma machine of type D
+ * This machine has a rewirable UKW, non changeable rotors.
* Copyright (C) 2015 Paul Schaub
This program is free software; you can redistribute it and/or modify
@@ -61,6 +65,27 @@ public class Enigma_D extends Enigma {
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(70, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(71, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(72, rot3, ring3);
+ this.reflector = (Reflector.ReflectorEnigma_D_KD_G31) Reflector.createReflector(70);
+ this.reflector.setRotation(rotRef);
+ this.reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k)
{
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java
index acad081..4270eba 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G260.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -38,4 +41,31 @@ public class Enigma_G260 extends Enigma_G31
this.rotor3 = Rotor.createRotor(62, 0, 0);
this.reflector = Reflector.createReflector(60);
}
+
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(60 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(60 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(60 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(60);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
}
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java
index 0b0a517..32771c1 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G31.java
@@ -2,6 +2,9 @@ package de.vanitasvitae.enigmandroid.enigma;
import android.util.Log;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -67,6 +70,33 @@ public class Enigma_G31 extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(40 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(40 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(40 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(40);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java
index 7ddac0d..59140e7 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_G312.java
@@ -1,6 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
import java.sql.Ref;
+import java.util.Random;
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -40,4 +42,31 @@ public class Enigma_G312 extends Enigma_G31
this.rotor3 = Rotor.createRotor(52, 0, 0);
this.reflector = Reflector.createReflector(50);
}
+
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(50 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(50 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(50 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(50);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
}
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java
index a9f3add..0bd597a 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_I.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -63,6 +66,30 @@ public class Enigma_I extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(5);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(5);
+ while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(5);
+ int ref = rand.nextInt(3);
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(10 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(10 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(10 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(10 + ref);
+ }
+
@Override
public char encryptChar(char k)
{
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java
index 3b20e48..271fbbe 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -61,6 +64,33 @@ public class Enigma_K extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(80 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(80 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(80 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(80);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java
index 8d3efa8..c944b5e 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Airforce.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -61,6 +64,33 @@ public class Enigma_K_Swiss_Airforce extends Enigma_K
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(100 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(100 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(100 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(100);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java
index 8336e38..5e7d919 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K_Swiss_Standard.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -61,6 +64,33 @@ public class Enigma_K_Swiss_Standard extends Enigma_K
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(90 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(90 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(90 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(90);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java
index 2104f2c..26a95be 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M3.java
@@ -1,5 +1,9 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.sql.Ref;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -37,4 +41,28 @@ public class Enigma_M3 extends Enigma_I
this.rotor3 = Rotor.createRotor(22, 0, 0);
this.reflector = Reflector.createReflector(20);
}
+
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(8);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8);
+ while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8);
+ int ref = rand.nextInt(2);
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(20 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(20 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(20 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(20 + ref);
+ }
}
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java
index dac411b..5f1c082 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_M4.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -75,6 +78,40 @@ public class Enigma_M4 extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ int rotor4;
+ int ref;
+ rotor1 = rand.nextInt(8);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8);
+ while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8);
+ rotor4 = rand.nextInt(2);
+ ref = rand.nextInt(2);
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rot4 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ring4 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(30 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(30 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(30 + rotor3, rot3, ring3);
+ this.rotor4 = Rotor.createRotor(38 + rotor4, rot4, ring4);
+ this.reflector = Reflector.createReflector(30 + ref);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
/**
* Substitute char k by sending the signal through the enigma.
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java
index 077cf52..8f2826b 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_R.java
@@ -1,5 +1,8 @@
package de.vanitasvitae.enigmandroid.enigma;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -61,6 +64,33 @@ public class Enigma_R extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(3);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(3);
+ rotor3 = 3 - rotor1 - rotor2;
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(110 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(110 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(110 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(110);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java
index 7f59fde..e10b96d 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_T.java
@@ -2,6 +2,9 @@ package de.vanitasvitae.enigmandroid.enigma;
import android.util.Log;
+import java.security.SecureRandom;
+import java.util.Random;
+
import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector;
import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor;
@@ -62,6 +65,33 @@ public class Enigma_T extends Enigma
}
}
+ @Override
+ public void randomState()
+ {
+ Random rand = new SecureRandom();
+
+ int rotor1, rotor2=-1, rotor3=-1;
+ rotor1 = rand.nextInt(8);
+ while(rotor2 == -1 || rotor2 == rotor1) rotor2 = rand.nextInt(8);
+ while(rotor3 == -1 || rotor3 == rotor2 || rotor3 == rotor1) rotor3 = rand.nextInt(8);
+
+ int rot1 = rand.nextInt(26);
+ int rot2 = rand.nextInt(26);
+ int rot3 = rand.nextInt(26);
+ int rotRef = rand.nextInt(26);
+ int ring1 = rand.nextInt(26);
+ int ring2 = rand.nextInt(26);
+ int ring3 = rand.nextInt(26);
+ int ringRef = rand.nextInt(26);
+
+ this.rotor1 = Rotor.createRotor(120 + rotor1, rot1, ring1);
+ this.rotor2 = Rotor.createRotor(120 + rotor2, rot2, ring2);
+ this.rotor3 = Rotor.createRotor(120 + rotor3, rot3, ring3);
+ this.reflector = Reflector.createReflector(120);
+ reflector.setRotation(rotRef);
+ reflector.setRingSetting(ringRef);
+ }
+
@Override
public char encryptChar(char k) {
nextState();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java
index 910280a..3784f08 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java
@@ -45,7 +45,7 @@ public abstract class LayoutContainer
public abstract Enigma getEnigma();
protected abstract void initializeLayout();
public abstract void resetLayout();
- protected abstract void setLayoutState(EnigmaStateBundle state);
+ public abstract void setLayoutState(EnigmaStateBundle state);
protected abstract void refreshState();
public abstract void showRingSettingsDialog();
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java
index fc3d4a2..9b5956c 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_D.java
@@ -95,7 +95,7 @@ public class LayoutContainer_D extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1PositionView.setSelection(state.getRotationRotor1());
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java
index 4d2a5f8..71dd37d 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G260.java
@@ -113,7 +113,7 @@ public class LayoutContainer_G260 extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java
index b576482..ff2d4f8 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G31.java
@@ -113,7 +113,7 @@ public class LayoutContainer_G31 extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java
index 9251355..baa1ee8 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_G312.java
@@ -113,7 +113,7 @@ public class LayoutContainer_G312 extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - offsetRot);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java
index 4cb4a86..099e113 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_I.java
@@ -114,7 +114,7 @@ public class LayoutContainer_I extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 10);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java
index cbc0f3a..0b2c49c 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java
@@ -112,7 +112,7 @@ public class LayoutContainer_K extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 80);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java
index b72f822..87c929c 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss.java
@@ -112,7 +112,7 @@ public class LayoutContainer_K_Swiss extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 90);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java
index b2b29ed..0ab9125 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K_Swiss_Airforce.java
@@ -112,7 +112,7 @@ public class LayoutContainer_K_Swiss_Airforce extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 100);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java
index 68b71c7..5cdc021 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M3.java
@@ -106,7 +106,7 @@ public class LayoutContainer_M3 extends LayoutContainer_I
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 20);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java
index c6d1ede..a80c446 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_M4.java
@@ -139,7 +139,7 @@ public class LayoutContainer_M4 extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state) {
+ public void setLayoutState(EnigmaStateBundle state) {
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 30);
this.rotor2View.setSelection(state.getTypeRotor2() - 30);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java
index 4d7c496..a19b099 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_R.java
@@ -111,7 +111,7 @@ public class LayoutContainer_R extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 110);
diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java
index ac47f1f..bef43a0 100644
--- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java
+++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_T.java
@@ -111,7 +111,7 @@ public class LayoutContainer_T extends LayoutContainer
}
@Override
- protected void setLayoutState(EnigmaStateBundle state)
+ public void setLayoutState(EnigmaStateBundle state)
{
this.state = state;
this.rotor1View.setSelection(state.getTypeRotor1() - 120);
diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml
index 4639283..158c299 100755
--- a/app/src/main/res/menu/main.xml
+++ b/app/src/main/res/menu/main.xml
@@ -3,14 +3,18 @@
tools:context=".MainActivity" >
+
- EnigmAndroid
Version
Zurücksetzen
+ Zufällige Konfiguration
Einstellungen
Ringstellung
Senden
@@ -39,5 +40,6 @@
Steckbrett gesteckert.
Keine Änderungen
Enigma zurückgesetzt
+ Enigma auf zufällige Konfiguration gesetzt
diff --git a/app/src/main/res/values-de/strings_activity_settings.xml b/app/src/main/res/values-de/strings_activity_settings.xml
index ee65914..13c0980 100755
--- a/app/src/main/res/values-de/strings_activity_settings.xml
+++ b/app/src/main/res/values-de/strings_activity_settings.xml
@@ -12,8 +12,8 @@
- G260 (Abwehr)
- D (Kommerziell)
- K
- - K (Schweiz)
- - K (Schweiz, Luftwaffe)
+ - Swiss-K (Schweiz)
+ - Swiss-K (Schweiz, Luftwaffe)
- R (\"Rocket\", Reichsbahn)
- T (\"Tirpitz\", Japan)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9973cf7..27e122e 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,6 +5,7 @@
EnigmAndroid
Version
Reset
+ Random configuration
Ring-Settings
Settings
Send
@@ -40,6 +41,7 @@
Plugged Plugboard.
No changes
Enigma reset
+ Enigma set to random configuration
- I
diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml
index a2d1377..892e63b 100755
--- a/app/src/main/res/values/strings_activity_settings.xml
+++ b/app/src/main/res/values/strings_activity_settings.xml
@@ -13,8 +13,8 @@
- G260 (Defense)
- D (Commercial)
- K
- - K (Swiss)
- - K (Swiss, Airforce)
+ - Swiss-K
+ - Swiss-K (Airforce)
- R (\"Rocket\", Railway)
- T (\"Tirpitz\", Japan)