diff --git a/core/src/com/jw/lightwallet/LightWallet.java b/core/src/com/jw/lightwallet/LightWallet.java index a167397..8314e06 100644 --- a/core/src/com/jw/lightwallet/LightWallet.java +++ b/core/src/com/jw/lightwallet/LightWallet.java @@ -1,17 +1,47 @@ package com.jw.lightwallet; +import java.io.File; + import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; +import com.jw.lightwallet.screens.CreateScreen; +import com.jw.lightwallet.screens.ImportKeysScreen; +import com.jw.lightwallet.screens.ImportSeedScreen; import com.jw.lightwallet.screens.MainScreen; +import com.jw.lightwallet.screens.WizardScreen; public class LightWallet extends Game { public static final String LOG = LightWallet.class.getSimpleName(); // Logging constant + // Set screen methods + public MainScreen getMainScreen(){ + return new MainScreen(this); + } + public WizardScreen getWizardScreen(){ + return new WizardScreen(this); + } + public CreateScreen getCreateScreen(){ + return new CreateScreen(this); + } + public ImportKeysScreen getImportKeysScreen(){ + return new ImportKeysScreen(this); + } + public ImportSeedScreen getImportSeedScreen(){ + return new ImportSeedScreen(this); + } @Override public void create () { + // Initialize logger Gdx.app.log(LightWallet.LOG, "Launching application"); - setScreen(new MainScreen(this)); + + // Check if config file exists, if not launch setup wizard + File f = new File("lightwallet.conf"); + if(f.exists() && !f.isDirectory()) { + setScreen(getMainScreen()); + } + else {setScreen(getWizardScreen());} + } diff --git a/core/src/com/jw/lightwallet/screens/AbstractScreen.java b/core/src/com/jw/lightwallet/screens/AbstractScreen.java index 448dc40..fa8d23a 100644 --- a/core/src/com/jw/lightwallet/screens/AbstractScreen.java +++ b/core/src/com/jw/lightwallet/screens/AbstractScreen.java @@ -14,7 +14,7 @@ public class AbstractScreen implements Screen { protected float aspect; protected float accumulator; - public AbstractScreen (LightWallet game) { + public AbstractScreen (final LightWallet game) { this.game = game; this.font = new BitmapFont(Gdx.files.internal("fonts/bauchaomaicha.fnt")); this.w = Gdx.graphics.getWidth(); @@ -26,7 +26,7 @@ public class AbstractScreen implements Screen { @Override public void show() { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Showing screen: " + this.getClass().getName()); } @Override @@ -39,31 +39,31 @@ public class AbstractScreen implements Screen { @Override public void resize(int width, int height) { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Resizing screen " + this.getClass().getName() + " to " + width + ", " + height); } @Override public void pause() { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Pausing screen: " + this.getClass().getName()); } @Override public void resume() { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Resuming screen: " + this.getClass().getName()); } @Override public void hide() { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Hiding screen: " + this.getClass().getName()); } @Override public void dispose() { // TODO Auto-generated method stub - + Gdx.app.log(LightWallet.LOG, "Disposing screen: " + this.getClass().getName()); } } diff --git a/core/src/com/jw/lightwallet/screens/CreateScreen.java b/core/src/com/jw/lightwallet/screens/CreateScreen.java new file mode 100644 index 0000000..decd7ed --- /dev/null +++ b/core/src/com/jw/lightwallet/screens/CreateScreen.java @@ -0,0 +1,90 @@ +package com.jw.lightwallet.screens; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.ui.TextField; +import com.jw.lightwallet.LightWallet; + +public class CreateScreen extends AbstractScreen { + + Stage stage; + Table screenlayout; + Skin uiSkin; + int padvalue; + + Image logo; + Texture logotex; + + String instruction; + Label instructionlabel; + Table textcontainer; + + Label namelabel; + TextField nametext; + Label pwlabel; + TextField pwtext; + Label pwrptlabel; + TextField pwrpttext; + + TextButton createbutton; + TextButton gobackbutton; + + + public CreateScreen(final LightWallet game) { + super(game); + + uiSkin = new Skin(Gdx.files.internal("skin/uiskin.json")); + padvalue = 20; + + stage = new Stage(); + Gdx.input.setInputProcessor(stage); + + screenlayout = new Table(); + + logo = new Image(new Texture(Gdx.files.internal("logo.png"))); + + + instruction = "Please enter a name for your wallet in the \"Wallet name\" field. This is typically wallet.bin, " + + "but you can make it whatever you like (as long as it is alphanumberic and periods only). " + + "Then please enter a strong password for your wallet that you will use to unlock, and then repeat it to ensure it is correct. " + + "Your password can be any combination of characters and symbols on your keyboard (I think)."; + + instructionlabel= new Label(instruction, uiSkin); + instructionlabel.setWrap(true); + textcontainer = new Table(); + textcontainer.add(instructionlabel).width(600); + + screenlayout.add(logo).pad(10).center().row(); + screenlayout.add(textcontainer).pad(padvalue).row(); + //screenlayout.add(buttontable).pad(padvalue).row(); + + screenlayout.setFillParent(true); + stage.addActor(screenlayout); + } + + public void show() { + super.show(); + + } + + public void render(float delta) { + super.render(delta); + + stage.draw(); + stage.act(delta); + + } + + public void dispose() { + super.dispose(); + + } + + +} diff --git a/core/src/com/jw/lightwallet/screens/ImportKeysScreen.java b/core/src/com/jw/lightwallet/screens/ImportKeysScreen.java new file mode 100644 index 0000000..f5ef0e7 --- /dev/null +++ b/core/src/com/jw/lightwallet/screens/ImportKeysScreen.java @@ -0,0 +1,12 @@ +package com.jw.lightwallet.screens; + +import com.jw.lightwallet.LightWallet; + +public class ImportKeysScreen extends AbstractScreen { + + public ImportKeysScreen(final LightWallet game) { + super(game); + // TODO Auto-generated constructor stub + } + +} diff --git a/core/src/com/jw/lightwallet/screens/ImportSeedScreen.java b/core/src/com/jw/lightwallet/screens/ImportSeedScreen.java new file mode 100644 index 0000000..2ffa294 --- /dev/null +++ b/core/src/com/jw/lightwallet/screens/ImportSeedScreen.java @@ -0,0 +1,12 @@ +package com.jw.lightwallet.screens; + +import com.jw.lightwallet.LightWallet; + +public class ImportSeedScreen extends AbstractScreen { + + public ImportSeedScreen(final LightWallet game) { + super(game); + // TODO Auto-generated constructor stub + } + +} diff --git a/core/src/com/jw/lightwallet/screens/MainScreen.java b/core/src/com/jw/lightwallet/screens/MainScreen.java index ccfa551..bde5e4b 100644 --- a/core/src/com/jw/lightwallet/screens/MainScreen.java +++ b/core/src/com/jw/lightwallet/screens/MainScreen.java @@ -41,7 +41,7 @@ public class MainScreen extends AbstractScreen { // Timer Timer timer; - public MainScreen(LightWallet game) { + public MainScreen(final LightWallet game) { super(game); timer = new Timer(); @@ -132,6 +132,7 @@ public class MainScreen extends AbstractScreen { } public void dispose() { + super.dispose(); } diff --git a/core/src/com/jw/lightwallet/screens/WizardScreen.java b/core/src/com/jw/lightwallet/screens/WizardScreen.java new file mode 100644 index 0000000..c65c073 --- /dev/null +++ b/core/src/com/jw/lightwallet/screens/WizardScreen.java @@ -0,0 +1,118 @@ +package com.jw.lightwallet.screens; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Label; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.jw.lightwallet.LightWallet; + +public class WizardScreen extends AbstractScreen { + + // Layout stuff + Stage stage; + Table screenlayout; + Skin uiSkin; + int padvalue; + + Image logo; + Texture logotex; + + Table textcontainer; + Label wizardlabel; + String wizardtext; + + Table buttontable; + TextButton createbutton; + TextButton importkeysbutton; + TextButton importseedbutton; + + + public WizardScreen(final LightWallet game) { + super(game); + + uiSkin = new Skin(Gdx.files.internal("skin/uiskin.json")); + padvalue = 20; + + stage = new Stage(); + Gdx.input.setInputProcessor(stage); + + screenlayout = new Table(); + + logo = new Image(new Texture(Gdx.files.internal("logo.png"))); + + + wizardtext = "Hello. It seems this is the either the first time you are launching LightWallet or you have deleted your lightwallet.conf file. " + + "Please select from the options below whether you would like to create a new wallet, import a wallet from a .keys file, " + + "or import a wallet using your 25-word mnemonic seed."; + + wizardlabel = new Label(wizardtext, uiSkin); + wizardlabel.setWrap(true); + textcontainer = new Table(); + textcontainer.add(wizardlabel).width(600); + + buttontable = new Table(); + createbutton = new TextButton("Create", uiSkin); + createbutton.addListener(new ClickListener() { + @Override + public void clicked (InputEvent event, float x, float y) { + game.setScreen(game.getCreateScreen()); + } + }); + createbutton.pad(padvalue); + + importkeysbutton = new TextButton("Import .keys", uiSkin); + importkeysbutton.addListener(new ClickListener() { + @Override + public void clicked (InputEvent event, float x, float y) { + game.setScreen(game.getImportKeysScreen()); + } + }); + importkeysbutton.pad(padvalue); + + importseedbutton = new TextButton("Import seed", uiSkin); + importseedbutton.addListener(new ClickListener() { + @Override + public void clicked (InputEvent event, float x, float y) { + game.setScreen(game.getImportSeedScreen()); + } + }); + importseedbutton.pad(padvalue); + + buttontable.add(createbutton).width(150); + buttontable.add(importkeysbutton).width(150); + buttontable.add(importseedbutton).width(150); + + screenlayout.add(logo).pad(10).center().row(); + screenlayout.add(textcontainer).pad(padvalue).row(); + screenlayout.add(buttontable).pad(padvalue).row(); + + screenlayout.setFillParent(true); + stage.addActor(screenlayout); + + } + + public void show() { + super.show(); + + } + + public void render(float delta) { + super.render(delta); + + stage.draw(); + stage.act(delta); + + } + + public void dispose() { + super.dispose(); + + } + +}