diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 18eec38..88093b5 100755 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,10 +4,11 @@ v0.1.9-not-yet-released< *Prevent user from setting incomplete reflector wiring *Add option to generate configuration from passphrase *Reworked Enigma definition (available Rotors/Reflectors/Entrywheels -*Verified correct functionality of Enigma T +*Completely verified correct functionality of Enigma T +*Added number spelling in spanish, italian +*Added backwards compatibility to Api level 10 *TODO: Write tests to ensure correct functionality *TODO: Migrate preferences to SettingsActivity -*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) v0.1.8-27.09.2015< diff --git a/app/app.iml b/app/app.iml index e002617..c183b64 100644 --- a/app/app.iml +++ b/app/app.iml @@ -71,7 +71,7 @@ - + @@ -89,7 +89,7 @@ - - + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6f05343..d57b91b 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,10 +6,10 @@ android { defaultConfig { applicationId "de.vanitasvitae.enigmandroid" - minSdkVersion 16 + minSdkVersion 10 targetSdkVersion 23 - versionCode 14 - versionName "0.1.8-27.09.2015-beta" + versionCode 15 + versionName "0.1.9-09.10.2015-beta" } buildTypes { release { @@ -19,5 +19,5 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:support-v4:23.0.0' + compile 'com.android.support:support-v4:23.0.1' } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java index 3037e54..6f73265 100755 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java @@ -104,7 +104,7 @@ public class MainActivity extends Activity switch (prefMachineType) { case "I": - this.setContentView(R.layout.activity_main_i_m3); + setContentView(R.layout.activity_main_i_m3); break; case "M3": this.setContentView(R.layout.activity_main_i_m3); @@ -328,7 +328,7 @@ public class MainActivity extends Activity builder.setTitle(R.string.title_about_dialog); builder.setView(aboutView) .setCancelable(true) - .setPositiveButton(R.string.dialog_positiv, new DialogInterface.OnClickListener() + .setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { @@ -383,7 +383,7 @@ public class MainActivity extends Activity * Set EnigmAndroid into a certain state as described in the QR-Code * @param mem content of the QR-Code */ - private void restoreStateFromCode(String mem) + public void restoreStateFromCode(String mem) { if(!mem.startsWith(APP_ID+"/")) { @@ -393,7 +393,7 @@ public class MainActivity extends Activity { mem = mem.substring((APP_ID+"/").length()); BigInteger s = new BigInteger(mem, 16); - Log.d(APP_ID, s.toString()); + Log.d(APP_ID, "Try to restore configuration from BigInteger value "+ s.toString()); setPrefMachineType(Enigma.chooseEnigmaFromSave(s)); updateContentView(); layoutContainer = LayoutContainer.createLayoutContainer(getPrefMachineType()); 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 88453ee..c513df3 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -38,6 +41,7 @@ public class Enigma_D extends Enigma { { super(); machineType = "D"; + Log.d(MainActivity.APP_ID, "Created Enigma D"); } @Override 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 c210dcb..e78ceee 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -31,6 +34,7 @@ public class Enigma_G260 extends Enigma_G31 { super(); machineType = "G260"; + Log.d(MainActivity.APP_ID, "Created Enigma G260"); } @Override 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 31a5326..e751e4f 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 @@ -1,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -37,6 +40,7 @@ public class Enigma_G31 extends Enigma { super(); machineType = "G31"; + Log.d(MainActivity.APP_ID, "Created Enigma G31"); } @Override 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 36354d1..d820b17 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -31,6 +34,7 @@ public class Enigma_G312 extends Enigma_G31 { super(); machineType = "G312"; + Log.d(MainActivity.APP_ID, "Created Enigma G312"); } @Override 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 ef3d068..ba65ffc 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -39,6 +42,7 @@ public class Enigma_I extends Enigma { super(); machineType = "I"; + Log.d(MainActivity.APP_ID, "Created Enigma I"); } @Override 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 6ef91ff..adfd0b5 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -37,6 +40,7 @@ public class Enigma_K extends Enigma { super(); machineType = "K"; + Log.d(MainActivity.APP_ID, "Created Enigma K"); } @Override 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 b9ba64f..a87032c 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -31,6 +34,7 @@ public class Enigma_K_Swiss_Airforce extends Enigma_K { super(); machineType = "KSA"; + Log.d(MainActivity.APP_ID, "Created Enigma KSA"); } @Override 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 e6f1023..5996921 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -31,6 +34,7 @@ public class Enigma_K_Swiss_Standard extends Enigma_K { super(); machineType = "KS"; + Log.d(MainActivity.APP_ID, "Created Enigma KS"); } @Override 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 f6bee79..3ce7d59 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -31,6 +34,7 @@ public class Enigma_M3 extends Enigma_I { super(); machineType = "M3"; + Log.d(MainActivity.APP_ID, "Created Enigma M3"); } @Override 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 a96ea93..d3e0c92 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 @@ -47,6 +47,7 @@ public class Enigma_M4 extends Enigma { super(); machineType = "M4"; + Log.d(MainActivity.APP_ID, "Created Enigma M4"); } protected void addAvailableThinRotor(Rotor r) 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 7b736c6..de370f5 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,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -38,6 +41,7 @@ public class Enigma_R extends Enigma { super(); machineType = "R"; + Log.d(MainActivity.APP_ID, "Created Enigma R"); } @Override 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 54222b7..a73b5f7 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 @@ -1,7 +1,10 @@ package de.vanitasvitae.enigmandroid.enigma; +import android.util.Log; + import java.math.BigInteger; +import de.vanitasvitae.enigmandroid.MainActivity; import de.vanitasvitae.enigmandroid.enigma.rotors.EntryWheel; import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -37,6 +40,7 @@ public class Enigma_T extends Enigma { super(); machineType = "T"; + Log.d(MainActivity.APP_ID, "Created Enigma T"); } @Override diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Plugboard.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Plugboard.java index c04b60e..de4e454 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Plugboard.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Plugboard.java @@ -35,7 +35,7 @@ public class Plugboard public Plugboard() { - plugs = empty; + plugs = Arrays.copyOf(empty, empty.length); } public Plugboard(int[] conf) @@ -53,12 +53,11 @@ public class Plugboard String s = ""; int x; - while((x = Enigma.getValue(b, 27)) != 26 || b.compareTo(BigInteger.ZERO) > 1) + while((x = Enigma.getValue(b, 27)) != 26 && b.compareTo(BigInteger.ZERO) > 1) { s = ((char) (x+65))+s; b = Enigma.removeDigit(b, 27); } - Log.d(MainActivity.APP_ID, "Restored: " + s); this.setConfiguration(stringToConfiguration(s)); return b; } @@ -207,9 +206,8 @@ public class Plugboard public static int[] bigIntegerToConfiguration(BigInteger b) { String s = ""; - int x; - while((x = Enigma.getValue(b, 27)) != 26 || b.compareTo(BigInteger.ZERO) > 1) + while((x = Enigma.getValue(b, 27)) != 26 && b.compareTo(BigInteger.ZERO) > 1) { s = ((char) (x+65))+s; b = Enigma.removeDigit(b, 27); diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/InputPreparer.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/InputPreparer.java index 66a7af7..e0d4c52 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/InputPreparer.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/InputPreparer.java @@ -56,6 +56,10 @@ public abstract class InputPreparer { break; case "fr": inPrep = new ReplaceNumbersFrench(inPrep); break; + case "sp": inPrep = new ReplaceNumbersSpanish(inPrep); + break; + case "it": inPrep = new ReplaceNumbersItalian(inPrep); + break; default: break; } @@ -158,6 +162,60 @@ public abstract class InputPreparer { } } + /** + * Concrete implementation of a spanish InputPreparer + */ + public static class ReplaceNumbersSpanish extends InputPreparer { + public ReplaceNumbersSpanish() { + this.child = null; + } + + public ReplaceNumbersSpanish(InputPreparer child) { + this.child = child; + } + + protected String prepare(String input) { + input = input.replace("0", "CERO") + .replace("1", "UNO") + .replace("2", "DOS") + .replace("3", "TRES") + .replace("4", "CUATRO") + .replace("5", "CINCO") + .replace("6", "SEIS") + .replace("7", "SIETE") + .replace("8", "OCHO") + .replace("9", "NUEVE"); + return input; + } + } + + /** + * Concrete implementation of a spanish InputPreparer + */ + public static class ReplaceNumbersItalian extends InputPreparer { + public ReplaceNumbersItalian() { + this.child = null; + } + + public ReplaceNumbersItalian(InputPreparer child) { + this.child = child; + } + + protected String prepare(String input) { + input = input.replace("0", "ZERO") + .replace("1", "UNO") + .replace("2", "DUE") + .replace("3", "TRE") + .replace("4", "QUATTRO") + .replace("5", "CINQUE") + .replace("6", "SEI") + .replace("7", "SETTE") + .replace("8", "OTTO") + .replace("9", "NOVE"); + return input; + } + } + /** * "Final Stage" of Input preparing. This should always be called last * (choose this as the inner most capsule of InputPreparers) 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 2373443..6bb75de 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java @@ -67,7 +67,6 @@ public abstract class LayoutContainer { if(inputView.getText().length()!=0) { - syncStateFromLayoutToEnigma(); String message = inputView.getText().toString(); message = inputPreparer.prepareString(message); 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 af30bc6..88c2cdd 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 @@ -47,6 +47,24 @@ public class LayoutContainer_T extends LayoutContainer this.resetLayout(); } + @Override + public void doCrypto() + { + if(inputView.getText().length()!=0) + { + syncStateFromLayoutToEnigma(); + String message = inputView.getText().toString(); + // + boolean egg = false; + if(message.hashCode() == -1475861192) egg = true; + message = inputPreparer.prepareString(message); + input.setText(message); + if(egg) output.setText("ENIGMA + android:text="@string/hint_enigma_reflector_wiring" + tools:ignore="ButtonStyle"/>