diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 8ab5f06..717f0b8 100755 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,7 +1,10 @@ CHANGELOG ENIGMANDROID v0.1.7-not-yet-released -*TODO:Fix about dialog (outdated manual) +*Fixed about dialog (outdated manual) *TODO: Add Enigma Z (find Rotor wiring reference somewhere) +*TODO: Add Enigma K +*TODO: Rewrite InputPreparer using decorator pattern to allow user customization +* v0.1.6-10.09.2015< *Updated CHANGELOG (oops) diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java index 5298d9b..904f84b 100755 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/MainActivity.java @@ -98,6 +98,9 @@ public class MainActivity extends Activity case "D": this.setContentView(R.layout.activity_main_d); break; + case "K": + this.setContentView(R.layout.activity_main_k); + break; default: this.setContentView(R.layout.activity_main_i_m3); break; 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 7593ae9..b73961c 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,5 @@ package de.vanitasvitae.enigmandroid.enigma; -import android.util.Log; - import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; @@ -30,7 +28,7 @@ public class Enigma_D extends Enigma { protected Rotor rotor2; protected Rotor rotor3; - protected Reflector.ReflectorEnigmaD reflector; + protected Reflector.ReflectorEnigmaDKD reflector; public Enigma_D() { @@ -45,7 +43,7 @@ public class Enigma_D extends Enigma { this.rotor1 = Rotor.createRotor(11, 0, 0); this.rotor2 = Rotor.createRotor(12, 0, 0); this.rotor3 = Rotor.createRotor(13, 0, 0); - this.reflector = new Reflector.ReflectorEnigmaD(); + this.reflector = new Reflector.ReflectorEnigmaDKD(); } @Override @@ -99,7 +97,7 @@ public class Enigma_D extends Enigma { this.rotor1 = Rotor.createRotor(state.getTypeRotor1(), state.getRotationRotor1(), state.getRingSettingRotor1()); this.rotor2 = Rotor.createRotor(state.getTypeRotor2(), state.getRotationRotor2(), state.getRingSettingRotor2()); this.rotor3 = Rotor.createRotor(state.getTypeRotor3(), state.getRotationRotor3(), state.getRingSettingRotor3()); - this.reflector = new Reflector.ReflectorEnigmaD(Plugboard.parseConfigurationString(state.getConfigurationReflector())); + this.reflector = new Reflector.ReflectorEnigmaDKD(Plugboard.parseConfigurationString(state.getConfigurationReflector())); this.reflector.setRotation(state.getRotationReflector()); this.reflector.setRingSetting(state.getRingSettingReflector()); } 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 new file mode 100644 index 0000000..3d480db --- /dev/null +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/Enigma_K.java @@ -0,0 +1,125 @@ +package de.vanitasvitae.enigmandroid.enigma; + +import de.vanitasvitae.enigmandroid.enigma.rotors.Reflector; +import de.vanitasvitae.enigmandroid.enigma.rotors.Rotor; + +/** + * Implementation of the Enigma machine of type K (Switzerland) + * Copyright (C) 2015 Paul Schaub + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * @author vanitasvitae + */ +public class Enigma_K extends Enigma +{ + protected Rotor entryWheel; + protected Rotor rotor1; + protected Rotor rotor2; + protected Rotor rotor3; + + protected Reflector reflector; + + public Enigma_K() + { + super(); + machineType = "K"; + } + @Override + public void initialize() + { + this.entryWheel = Rotor.createRotor(0, 0, 0); + this.rotor1 = Rotor.createRotor(14, 0, 0); + this.rotor2 = Rotor.createRotor(15, 0, 0); + this.rotor3 = Rotor.createRotor(16, 0, 0); + this.reflector = Reflector.createReflector(7); + } + + @Override + public void nextState() + { + rotor1.rotate(); + if (rotor1.isAtTurnoverPosition() || (this.doAnomaly && prefAnomaly)) + { + rotor2.rotate(); + this.doAnomaly = rotor2.doubleTurnAnomaly(); + if (rotor2.isAtTurnoverPosition()) + { + rotor3.rotate(); + } + } + } + + @Override + public char encryptChar(char k) { + nextState(); + int x = ((int) k)-65; //Cast to int and remove Unicode Offset (A=65 in Unicode.) + //Encryption + //forward direction + x = entryWheel.encryptForward(x); + x = rotor1.normalize(x + rotor1.getRotation() - rotor1.getRingSetting()); + x = rotor1.encryptForward(x); + x = rotor1.normalize(x - rotor1.getRotation() + rotor1.getRingSetting() + rotor2.getRotation() - rotor2.getRingSetting()); + x = rotor2.encryptForward(x); + x = rotor1.normalize(x - rotor2.getRotation() + rotor2.getRingSetting() + rotor3.getRotation() - rotor3.getRingSetting()); + x = rotor3.encryptForward(x); + x = rotor1.normalize(x - rotor3.getRotation() + rotor3.getRingSetting() + reflector.getRotation() - reflector.getRingSetting()); + //backward direction + x = reflector.encrypt(x); + x = rotor1.normalize(x + rotor3.getRotation() - rotor3.getRingSetting() - reflector.getRotation() + reflector.getRingSetting()); + x = rotor3.encryptBackward(x); + x = rotor1.normalize(x + rotor2.getRotation() - rotor2.getRingSetting() - rotor3.getRotation() + rotor3.getRingSetting()); + x = rotor2.encryptBackward(x); + x = rotor1.normalize(x + rotor1.getRotation() - rotor1.getRingSetting() - rotor2.getRotation() + rotor2.getRingSetting()); + x = rotor1.encryptBackward(x); + x = rotor1.normalize(x - rotor1.getRotation() + rotor1.getRingSetting()); + x = entryWheel.encryptBackward(x); + return (char) (x + 65); //Add Offset again, cast back to char and return + } + + @Override + public void setState(EnigmaStateBundle state) + { + this.entryWheel = Rotor.createRotor(state.getTypeEntryWheel(), 0, 0); + this.rotor1 = Rotor.createRotor(state.getTypeRotor1(), state.getRotationRotor1(), state.getRingSettingRotor1()); + this.rotor2 = Rotor.createRotor(state.getTypeRotor2(), state.getRotationRotor2(), state.getRingSettingRotor2()); + this.rotor3 = Rotor.createRotor(state.getTypeRotor3(), state.getRotationRotor3(), state.getRingSettingRotor3()); + this.reflector = Reflector.createReflector(state.getTypeReflector()); + this.reflector.setRotation(state.getRotationReflector()); + this.reflector.setRingSetting(state.getRingSettingReflector()); + } + + @Override + public EnigmaStateBundle getState() { + EnigmaStateBundle state = new EnigmaStateBundle(); + + state.setTypeRotor1(rotor1.getNumber()); + state.setTypeRotor2(rotor2.getNumber()); + state.setTypeRotor3(rotor3.getNumber()); + + state.setRotationRotor1(rotor1.getRotation()); + state.setRotationRotor2(rotor2.getRotation()); + state.setRotationRotor3(rotor3.getRotation()); + + state.setRingSettingRotor1(rotor1.getRingSetting()); + state.setRingSettingRotor2(rotor2.getRingSetting()); + state.setRingSettingRotor3(rotor3.getRingSetting()); + + state.setTypeReflector(reflector.getNumber()); + state.setRotationReflector(reflector.getRotation()); + state.setRingSettingReflector(reflector.getRingSetting()); + + return state; + } +} diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/EditTextAdapter.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/EditTextAdapter.java index a2e002f..518ecfc 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/EditTextAdapter.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/inputPreparer/EditTextAdapter.java @@ -22,7 +22,9 @@ public abstract class EditTextAdapter */ public String getText() { - return content; + if(editText.getText().length() != 0) + return content; + else return content = ""; } public String getModifiedText() diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Reflector.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Reflector.java index e0f95d7..e735d82 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Reflector.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Reflector.java @@ -1,5 +1,6 @@ package de.vanitasvitae.enigmandroid.enigma.rotors; +import java.sql.Ref; import java.util.ArrayList; import de.vanitasvitae.enigmandroid.enigma.Plugboard; @@ -68,12 +69,14 @@ public class Reflector /** * Factory method to create reflectors. * @param type type of the created reflector - * "A" -> ReflectorA - * "B" -> ReflectorB - * "C" -> ReflectorC - * "ThinB" -> ReflectorThinB - * "ThinC" -> ReflectorThinC - * "ReflectorD" -> ReflectorEnigmaD + * 1 -> ReflectorA + * 2 -> ReflectorB + * 3 -> ReflectorC + * 4 -> ReflectorThinB + * 5 -> ReflectorThinC + * 6 -> ReflectorEnigmaD + * 7 -> ReflectorK + * 7 -> ReflectorT * default -> ReflectorB * @return Reflector */ @@ -86,7 +89,9 @@ public class Reflector case 3: return new ReflectorC(); case 4: return new ReflectorThinB(); case 5: return new ReflectorThinC(); - case 6: return new ReflectorEnigmaD(); + case 6: return new ReflectorEnigmaDKD(); + case 7: return new ReflectorEnigmaK(); + case 8: return new ReflectorEnigmaT(); default: return new ReflectorB(); } } @@ -209,24 +214,24 @@ public class Reflector } /** - * Plugable Reflector of the Enigma machine of type D + * Pluggable Reflector of the Enigma machine of type D and KD * Standard wiring: AI,BM,CE,DT,FG,HR,JY,KS,LQ,NZ,OX,PW,UV * Has additional ringSetting and can rotate */ - public static class ReflectorEnigmaD extends Reflector + public static class ReflectorEnigmaDKD extends Reflector { public static final String defaultWiring = "AI,BM,CE,DT,FG,HR,JY,KS,LQ,NZ,OX,PW,UV"; private Plugboard connections; private int ringSetting; private int rotation; - public ReflectorEnigmaD() + public ReflectorEnigmaDKD() { super("Ref-D", 6, null); connections = new Plugboard(); reset(); } - public ReflectorEnigmaD(int[][] conf) + public ReflectorEnigmaDKD(int[][] conf) { super("Ref-D", 6, null); connections = new Plugboard(conf); @@ -314,4 +319,23 @@ public class Reflector } } + private static class ReflectorEnigmaK extends Reflector + { + public ReflectorEnigmaK() + { + super("Ref-K", 7, new Integer[]{8,12,4,19,2,6,5,17,0,24,18,16,1,25,23,22,11,7,10,3,21,20,15,14,9,13}); + } + } + /** + * Reflector as used in the Enigma type T (Tirpitz) + * G E K P B T A U M O C N I L J D X Z Y F H W V Q S R + */ + private static class ReflectorEnigmaT extends Reflector + { + public ReflectorEnigmaT() + { + super("Ref-T", 8, new Integer[]{6,4,10,15,1,19,0,20,12,14,2,13,8,11,9,3,23,25,24,5,7,22,21,16,18,17}); + } + } + } diff --git a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Rotor.java b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Rotor.java index 1c38075..6e58479 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Rotor.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/enigma/rotors/Rotor.java @@ -77,7 +77,7 @@ public class Rotor { switch (type) { - case 0: return new EntryWheelD(); + case 0: return new EntryWheelDK(); case 1: return new RotorI(rotation, ringSetting); case 2: return new RotorII(rotation, ringSetting); case 3: return new RotorIII(rotation, ringSetting); @@ -91,6 +91,9 @@ public class Rotor case 11: return new RotorDI(rotation, ringSetting); case 12: return new RotorDII(rotation, ringSetting); case 13: return new RotorDIII(rotation, ringSetting); + case 14: return new RotorKI(rotation, ringSetting); + case 15: return new RotorKII(rotation, ringSetting); + case 16: return new RotorKIII(rotation, ringSetting); default: return new RotorI(rotation, ringSetting); } @@ -414,9 +417,13 @@ public class Rotor } } - private static class EntryWheelD extends Rotor + /** + * EntryWheel as used in the Enigma models D, K + * Q W E R T Z U I O A S D F G H J K P Y X C V B N M L + */ + private static class EntryWheelDK extends Rotor { - public EntryWheelD() + public EntryWheelDK() { super("ETW-D", 0, new Integer[]{9,22,20,11,2,12,13,14,7,15,16,25,24,23,8,17,0,3,10,4,6,21,1,19,18,5}, @@ -484,4 +491,52 @@ public class Rotor new Integer[]{14}, ringSetting, rotation); } } + + /** + * Rotor I as used in the Enigma Type K (Switzerland) + * P E Z U O H X S C V F M T B G L R I N Q J W A Y D K + * Turnover Z + */ + private static class RotorKI extends Rotor + { + public RotorKI(int rotation, int ringSetting) + { + super("K-I", 14, + new Integer[]{15,4,25,20,14,7,23,18,2,21,5,12,19,1,6,11,17,8,13,16,9,22,0,24,3,10}, + new Integer[]{22,13,8,24,1,10,14,5,17,20,25,15,11,18,4,0,19,16,7,12,3,9,21,6,23,2}, + new Integer[]{25}, ringSetting, rotation); + } + } + + /** + * Rotor II as used in the Enigma Type K (Switzerland) + * Z O U E S Y D K F W P C I Q X H M V B L G N J R A T + * Turnover F + */ + private static class RotorKII extends Rotor + { + public RotorKII(int rotation, int ringSetting) + { + super("K-II", 15, + new Integer[]{25,14,20,4,18,24,3,10,5,22,15,2,8,16,23,7,12,21,1,11,6,13,9,17,0,19}, + new Integer[]{24,18,11,6,3,8,20,15,12,22,7,19,16,21,1,10,13,23,4,25,2,17,9,14,5,0}, + new Integer[]{5}, ringSetting, rotation); + } + } + + /** + * Rotor III as used in the Enigma Type K (Switzerland) + * E H R V X G A O B Q U S I M Z F L Y N W K T P D J C + * Turnover O + */ + private static class RotorKIII extends Rotor + { + public RotorKIII(int rotation, int ringSetting) + { + super("K-III", 16, + new Integer[]{4,7,17,21,23,6,0,14,1,16,20,18,8,12,25,5,11,24,13,22,10,19,15,3,9,2}, + new Integer[]{6,8,25,23,0,15,5,1,12,24,20,16,13,18,7,22,9,2,11,21,10,3,19,4,17,14}, + new Integer[]{14}, ringSetting, rotation); + } + } } 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 8e47344..8379d20 100644 --- a/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer.java @@ -100,6 +100,7 @@ public abstract class LayoutContainer case "M3": return new LayoutContainer_M3(); case "M4": return new LayoutContainer_M4(); case "D": return new LayoutContainer_D(); + case "K": return new LayoutContainer_K(); default: return new LayoutContainer_I(); } } 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 08370d1..fb2e795 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 @@ -85,8 +85,8 @@ public class LayoutContainer_D extends LayoutContainer { enigma = new Enigma_D(); setLayoutState(enigma.getState()); - outputView.setText(""); - inputView.setText(""); + output.setText(""); + input.setText(""); } @Override 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 50b79fb..ec0f05d 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 @@ -104,8 +104,8 @@ public class LayoutContainer_I extends LayoutContainer { enigma = new Enigma_I(); setLayoutState(enigma.getState()); - outputView.setText(""); - inputView.setText(""); + output.setText(""); + input.setText(""); } @Override @@ -143,7 +143,8 @@ public class LayoutContainer_I extends LayoutContainer @Override public void showRingSettingsDialog() { - new RingSettingsDialogBuilder.RingSettingsDialogBuilderRotRotRot().createRingSettingsDialog(state); + new RingSettingsDialogBuilder.RingSettingsDialogBuilderRotRotRot(). + createRingSettingsDialog(state); } @Override 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 new file mode 100644 index 0000000..695cb30 --- /dev/null +++ b/app/src/main/java/de/vanitasvitae/enigmandroid/layout/LayoutContainer_K.java @@ -0,0 +1,150 @@ +package de.vanitasvitae.enigmandroid.layout; + +import android.widget.ArrayAdapter; +import android.widget.Spinner; + +import de.vanitasvitae.enigmandroid.R; +import de.vanitasvitae.enigmandroid.enigma.Enigma; +import de.vanitasvitae.enigmandroid.enigma.EnigmaStateBundle; +import de.vanitasvitae.enigmandroid.enigma.Enigma_K; + +/** + * LayoutContainer for the Enigma Model K + * This class contains the layout and controls the layout elements such as spinners and stuff + * Copyright (C) 2015 Paul Schaub + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * @author vanitasvitae + */ +public class LayoutContainer_K extends LayoutContainer +{ + private Enigma_K enigma; + + protected Spinner rotor1View; + protected Spinner rotor2View; + protected Spinner rotor3View; + + protected Spinner rotor1PositionView; + protected Spinner rotor2PositionView; + protected Spinner rotor3PositionView; + protected Spinner reflectorPositionView; + + public LayoutContainer_K() + { + super(); + main.setTitle("K - EnigmAndroid"); + this.resetLayout(); + } + + @Override + public Enigma getEnigma() { + return this.enigma; + } + + @Override + protected void initializeLayout() { + this.rotor1View = (Spinner) main.findViewById(R.id.rotor1); + this.rotor2View = (Spinner) main.findViewById(R.id.rotor2); + this.rotor3View = (Spinner) main.findViewById(R.id.rotor3); + this.rotor1PositionView = (Spinner) main.findViewById(R.id.rotor1position); + this.rotor2PositionView = (Spinner) main.findViewById(R.id.rotor2position); + this.rotor3PositionView = (Spinner) main.findViewById(R.id.rotor3position); + this.reflectorPositionView = (Spinner) main.findViewById(R.id.reflector_position); + + Character[] rotorPositionArray = new Character[26]; + for(int i=0; i<26; i++) {rotorPositionArray[i] = (char) (65+i); /**Fill with A..Z*/} + + ArrayAdapter rotor1Adapter = ArrayAdapter.createFromResource(main, R.array.rotors_1_3, + android.R.layout.simple_spinner_item); + rotor1Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + rotor1View.setAdapter(rotor1Adapter); + ArrayAdapter rotor2Adapter = ArrayAdapter.createFromResource(main, R.array.rotors_1_3, + android.R.layout.simple_spinner_item); + rotor2Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + rotor2View.setAdapter(rotor2Adapter); + ArrayAdapter rotor3Adapter = ArrayAdapter.createFromResource(main, R.array.rotors_1_3, + android.R.layout.simple_spinner_item); + rotor3Adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + rotor3View.setAdapter(rotor3Adapter); + + ArrayAdapter rotor1PositionAdapter = new ArrayAdapter<>(main.getApplicationContext(), + android.R.layout.simple_spinner_item, rotorPositionArray); + rotor1PositionAdapter.setDropDownViewResource( + android.R.layout.simple_spinner_dropdown_item); + rotor1PositionView.setAdapter(rotor1PositionAdapter); + ArrayAdapter rotor2PositionAdapter = new ArrayAdapter<>(main.getApplicationContext(), + android.R.layout.simple_spinner_item, rotorPositionArray); + rotor2PositionAdapter.setDropDownViewResource( + android.R.layout.simple_spinner_dropdown_item); + rotor2PositionView.setAdapter(rotor2PositionAdapter); + ArrayAdapter rotor3PositionAdapter = new ArrayAdapter<>(main.getApplicationContext(), + android.R.layout.simple_spinner_item, rotorPositionArray); + rotor3PositionAdapter.setDropDownViewResource( + android.R.layout.simple_spinner_dropdown_item); + rotor3PositionView.setAdapter(rotor3PositionAdapter); + + ArrayAdapter reflectorPositionAdapter = new ArrayAdapter<>(main.getApplicationContext(), + android.R.layout.simple_spinner_item, rotorPositionArray); + reflectorPositionAdapter.setDropDownViewResource( + android.R.layout.simple_spinner_dropdown_item); + reflectorPositionView.setAdapter(reflectorPositionAdapter); + } + + @Override + public void resetLayout() { + enigma = new Enigma_K(); + setLayoutState(enigma.getState()); + output.setText(""); + input.setText(""); + } + + @Override + protected void setLayoutState(EnigmaStateBundle state) + { + this.state = state; + this.rotor1View.setSelection(state.getTypeRotor1()-14); + this.rotor2View.setSelection(state.getTypeRotor2()-14); + this.rotor3View.setSelection(state.getTypeRotor3()-14); + this.rotor1PositionView.setSelection(state.getRotationRotor1()); + this.rotor2PositionView.setSelection(state.getRotationRotor2()); + this.rotor3PositionView.setSelection(state.getRotationRotor3()); + this.reflectorPositionView.setSelection(state.getRotationReflector()); + } + + @Override + protected void refreshState() + { + state.setTypeRotor1(rotor1View.getSelectedItemPosition() + 14); + state.setTypeRotor2(rotor2View.getSelectedItemPosition() + 14); + state.setTypeRotor3(rotor3View.getSelectedItemPosition() + 14); + state.setRotationRotor1(rotor1PositionView.getSelectedItemPosition()); + state.setRotationRotor2(rotor2PositionView.getSelectedItemPosition()); + state.setRotationRotor3(rotor3PositionView.getSelectedItemPosition()); + state.setRotationReflector(reflectorPositionView.getSelectedItemPosition()); + } + + @Override + public void showRingSettingsDialog() + { + new RingSettingsDialogBuilder.RingSettingsDialogBuilderRotRotRotRef(). + createRingSettingsDialog(state); + } + + @Override + protected boolean isValidConfiguration() + { + return true; + } +} 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 af50105..7d6bd91 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 @@ -94,8 +94,8 @@ public class LayoutContainer_M3 extends LayoutContainer_I { enigma = new Enigma_M3(); setLayoutState(enigma.getState()); - outputView.setText(""); - inputView.setText(""); + output.setText(""); + input.setText(""); } @Override 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 12db678..7e72f11 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 @@ -129,8 +129,8 @@ public class LayoutContainer_M4 extends LayoutContainer public void resetLayout() { enigma = new Enigma_M4(); setLayoutState(enigma.getState()); - outputView.setText(""); - inputView.setText(""); + output.setText(""); + input.setText(""); } @Override diff --git a/app/src/main/res/layout-land/activity_main_k.xml b/app/src/main/res/layout-land/activity_main_k.xml new file mode 100755 index 0000000..4f7616c --- /dev/null +++ b/app/src/main/res/layout-land/activity_main_k.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +