From 72af83215661445f490fdeab7654650f487b2a17 Mon Sep 17 00:00:00 2001 From: GME Date: Sun, 10 Jun 2018 12:45:41 +0200 Subject: [PATCH] modif repertoire app mobile et ajout modif --- .gitignore | 72 ++++++++ .idea/misc.xml | 33 ++++ .idea/modules.xml | 9 + .idea/runConfigurations.xml | 12 ++ .idea/vcs.xml | 6 + README.md | 2 + app/.gitignore | 1 + app/build.gradle | 31 ++++ app/proguard-rules.pro | 21 +++ .../ExampleInstrumentedTest.java | 26 +++ app/src/main/AndroidManifest.xml | 36 ++++ .../monnthicmobile/AccessBlockchain.java | 70 ++++++++ .../monnthic/monnthicmobile/DemoActivity.java | 43 +++++ .../monnthicmobile/HomepageActivity.java | 55 ++++++ .../monnthicmobile/LoginActivity.java | 73 ++++++++ .../monnthicmobile/SignupActivity.java | 112 ++++++++++++ .../monnthicmobile/TransactionActivity.java | 43 +++++ .../example/monnthic/monnthicmobile/User.java | 51 ++++++ .../monnthicmobile/UserAccountActivity.java | 56 ++++++ .../monnthicmobile/WalletActivity.java | 51 ++++++ .../WalletPresenterActivity.java | 63 +++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++++ .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++++++ app/src/main/res/drawable/logo.PNG | Bin 0 -> 68161 bytes app/src/main/res/layout/activity_2fa.xml | 6 + .../main/res/layout/activity_demo_wallet.xml | 45 +++++ app/src/main/res/layout/activity_homepage.xml | 63 +++++++ app/src/main/res/layout/activity_login.xml | 84 +++++++++ app/src/main/res/layout/activity_signup.xml | 110 ++++++++++++ .../main/res/layout/activity_transaction.xml | 67 +++++++ .../main/res/layout/activity_user_account.xml | 56 ++++++ app/src/main/res/layout/activity_wallet.xml | 49 +++++ .../res/layout/activity_wallet_presenter.xml | 97 ++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes app/src/main/res/values/colors.xml | 6 + app/src/main/res/values/dimens.xml | 5 + app/src/main/res/values/strings.xml | 17 ++ app/src/main/res/values/styles.xml | 11 ++ .../monnthicmobile/ExampleUnitTest.java | 17 ++ build.gradle | 27 +++ gradle.properties | 17 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 160 +++++++++++++++++ gradlew.bat | 90 ++++++++++ settings.gradle | 1 + 57 files changed, 2014 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/example/monnthic/monnthicmobile/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/AccessBlockchain.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/DemoActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/HomepageActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/LoginActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/SignupActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/TransactionActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/User.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/UserAccountActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/WalletActivity.java create mode 100644 app/src/main/java/com/example/monnthic/monnthicmobile/WalletPresenterActivity.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/logo.PNG create mode 100644 app/src/main/res/layout/activity_2fa.xml create mode 100644 app/src/main/res/layout/activity_demo_wallet.xml create mode 100644 app/src/main/res/layout/activity_homepage.xml create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/activity_signup.xml create mode 100644 app/src/main/res/layout/activity_transaction.xml create mode 100644 app/src/main/res/layout/activity_user_account.xml create mode 100644 app/src/main/res/layout/activity_wallet.xml create mode 100644 app/src/main/res/layout/activity_wallet_presenter.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/dimens.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/example/monnthic/monnthicmobile/ExampleUnitTest.java create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..11de578 --- /dev/null +++ b/.gitignore @@ -0,0 +1,72 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.externalNativeBuild +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/dictionaries +.idea/libraries + +# Keystore files +# Uncomment the following line if you do not want to check your keystore files in. +#*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3963879 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..d23da21 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..77a3af4 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +Mobile Directory : +Directory which will contains files related to the mobile application. \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..729e9db --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 26 + defaultConfig { + applicationId "com.example.monnthic.monnthicmobile" + multiDexEnabled true + minSdkVersion 19 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:design:26.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.1' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + compile ('org.web3j:core:3.3.1-android') +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/app/src/androidTest/java/com/example/monnthic/monnthicmobile/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/monnthic/monnthicmobile/ExampleInstrumentedTest.java new file mode 100644 index 0000000..4461184 --- /dev/null +++ b/app/src/androidTest/java/com/example/monnthic/monnthicmobile/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.monnthic.monnthicmobile", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..58c5e1c --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/AccessBlockchain.java b/app/src/main/java/com/example/monnthic/monnthicmobile/AccessBlockchain.java new file mode 100644 index 0000000..dd129db --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/AccessBlockchain.java @@ -0,0 +1,70 @@ +package com.example.monnthic.monnthicmobile; + +import org.web3j.protocol.Web3j; +import org.web3j.protocol.Web3jFactory; +import org.web3j.protocol.core.methods.response.EthGetBalance; +import org.web3j.protocol.http.HttpService; +import org.web3j.protocol.core.DefaultBlockParameterName; +import java.math.BigInteger; + + + + +/** + * Created by Guillaume on 28/05/2018. + */ + +public class AccessBlockchain { + private static final String node2 = "http://93.30.148.59:1402"; + private static final String node1 = "http://93.30.148.59:1401"; + private static String address = "0x5421c79d465a288c28e10aa43f9b7dff1b313c8e"; + //Web3j web3jNode2 = Web3jFactory.build(new HttpService(node2)); + + public static void main(String [ ] args) + { + try{ + //BigInteger test = getTheBalanceOfWallet(address); + //System.out.println(test); + + //Web3j web3jNode1 = Web3jFactory.build(new HttpService(node1)); + //Web3j web3jNode2 = Web3jFactory.build(new HttpService(node2)); + //System.out.println("ethAccounts : "+web3jNode1.ethAccounts().send().getAccounts()); + //System.out.println("ethGasPrice : "+web3jNode1.ethGasPrice().send().getGasPrice()); + //System.out.println("ethGetWork : "+web3jNode1.ethGetWork().send().getResult()); + //System.out.println("ethBlockNumber : "+web3jNode1.ethBlockNumber().send().getResult()); + //EthGetBalance ethGetBalance = web3jNode1.ethGetBalance("0x5421c79d465a288c28e10aa43f9b7dff1b313c8e", DefaultBlockParameterName.LATEST).sendAsync().get(); + // BigInteger wei = ethGetBalance.getBalance(); + //System.out.println("wei is : "+wei); + + //System.out.println("*************************************************"); + //System.out.println("ethAccounts : "+web3jNode2.ethAccounts().send().getAccounts()); + //System.out.println("ethGasPrice : "+web3jNode2.ethGasPrice().send().getGasPrice()); + //System.out.println("ethGetWork : "+web3jNode2.ethGetWork().send().getResult()); + //System.out.println("ethBlockNumber : "+web3jNode2.ethBlockNumber().send().getResult()); + //EthGetBalance ethGetBalance2 = web3jNode2.ethGetBalance("0x0278467c617c13604b3d88b95c2257a3a8a7bc01", DefaultBlockParameterName.LATEST).sendAsync().get(); + //BigInteger wei2 = ethGetBalance2.getBalance(); + //System.out.println("wei is : "+wei2); + }catch (Exception e){ + e.printStackTrace(); + } + + } + + + public BigInteger getTheBalanceOfWallet(String walletAddress){ + Web3j web3jNode1 = Web3jFactory.build(new HttpService(node1)); + try{ + EthGetBalance ethGetBalance = web3jNode1.ethGetBalance(walletAddress, DefaultBlockParameterName.LATEST).sendAsync().get(); + BigInteger wei = ethGetBalance.getBalance(); + return wei; + }catch (Exception e){ + e.getMessage(); + e.printStackTrace(); + } + return null; + } + + public boolean sendTransationTo(String addressDestination, BigInteger amountToSend){ + return false; + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/DemoActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/DemoActivity.java new file mode 100644 index 0000000..77bb752 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/DemoActivity.java @@ -0,0 +1,43 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +public class DemoActivity extends AppCompatActivity { + private static final String WALLET_A = "0x5421c79d465a288c28e10aa43f9b7dff1b313c8e"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_demo_wallet); + Button bWalletA = findViewById(R.id.walletA); + Button bWalletB = findViewById(R.id.walletB); + + bWalletA.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + launchWalletPresenterActivity(0); + } + }); + bWalletB.setOnClickListener(new View.OnClickListener() { + public void onClick(View view) { + launchWalletPresenterActivity(1); + } + }); + } + + public void launchWalletPresenterActivity(int idWallet) { + if (idWallet == 0) { + Intent demoWalletIntent = new Intent(DemoActivity.this, WalletPresenterActivity.class); + demoWalletIntent.putExtra("WALLET_ADDRESS",WALLET_A); + DemoActivity.this.startActivity(demoWalletIntent); + } else { + Intent demoWalletIntent = new Intent(DemoActivity.this, WalletPresenterActivity.class); + demoWalletIntent.putExtra("WALLET_ADDRESS","WALLET B"); + DemoActivity.this.startActivity(demoWalletIntent); + } + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/HomepageActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/HomepageActivity.java new file mode 100644 index 0000000..9c868e7 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/HomepageActivity.java @@ -0,0 +1,55 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +public class HomepageActivity extends AppCompatActivity { + //TODO MOVE TO LOGIN ACTIVITY + private static final String[] DUMMY_CREDENTIALS = new String[]{ + "dummy:test" + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_homepage); + Button bRegister = findViewById(R.id.register); + Button bLogin = findViewById(R.id.login); + Button bDemo = findViewById(R.id.demo); + + bRegister.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + launchRegisterActivity(); + } + }); + bLogin.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + launchLoginActivity(); + } + }); + bDemo.setOnClickListener(new View.OnClickListener(){ + public void onClick(View view){ + launchDemoActivity(); + } + }); + } + + public void launchRegisterActivity(){ + Intent registerIntent = new Intent(HomepageActivity.this, SignupActivity.class); + HomepageActivity.this.startActivity(registerIntent); + } + public void launchLoginActivity(){ + Intent loginIntent = new Intent(HomepageActivity.this, LoginActivity.class); + HomepageActivity.this.startActivity(loginIntent); + } + public void launchDemoActivity(){ + Intent demoIntent = new Intent(HomepageActivity.this, DemoActivity.class); + HomepageActivity.this.startActivity(demoIntent); + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/LoginActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/LoginActivity.java new file mode 100644 index 0000000..0f34dea --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/LoginActivity.java @@ -0,0 +1,73 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +public class LoginActivity extends AppCompatActivity { + + private EditText email; + private EditText password; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + + email = findViewById(R.id.editTextEmail); + password = findViewById(R.id.editTextPassword); + Button buttonCancel = findViewById(R.id.buttonCancel); + Button buttonOk = findViewById(R.id.buttonOk); + + buttonCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + buttonOk.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + validateInput(); + } + }); + } + + public void onClickForgetPassword(View v){ + Toast.makeText(this, "Forget password", Toast.LENGTH_SHORT).show(); + } + public void onClickForgetEmail(View v){ + Toast.makeText(this, "Forget email", Toast.LENGTH_SHORT).show(); + } + public void validateInput(){ + if(isEmptyEdit(email)){ + Toast.makeText(this, "You did not enter your email", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(password)) { + Toast.makeText(this, "You did not enter your password", Toast.LENGTH_SHORT).show(); + } else { + if(checkUser(email.getText().toString(),password.getText().toString())){ + launchWalletActivity(1); + }else{ + Toast.makeText(this, "Wrong authentification", Toast.LENGTH_SHORT).show(); + } + } + } + private boolean isEmptyEdit(EditText etText) { + return etText.getText().toString().trim().length() == 0; + } + //TODO CHECK USER AND SEND BACK ID + private boolean checkUser(String m, String p){ + return true; + } + public void launchWalletActivity(int ldapId){; + //LAUNCH APP WALLET WITH ID USER + Intent walletIntent = new Intent(LoginActivity.this, WalletActivity.class); + walletIntent.putExtra("idUser", ldapId); + LoginActivity.this.startActivity(walletIntent); + finish(); + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/SignupActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/SignupActivity.java new file mode 100644 index 0000000..825cb35 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/SignupActivity.java @@ -0,0 +1,112 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +public class SignupActivity extends AppCompatActivity { + + private EditText name; + private EditText firstname; + private EditText email; + private EditText confirmEmail; + private EditText password; + private EditText confirmPassword; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_signup); + + name = findViewById(R.id.inputName); + firstname = findViewById(R.id.inputPrenom); + email = findViewById(R.id.inputEmail); + confirmEmail = findViewById(R.id.inputConfEmail); + password = findViewById(R.id.inputPassword); + confirmPassword = findViewById(R.id.inputConfPassword); + Button buttonCancel = findViewById(R.id.buttonCancel); + Button buttonOk = findViewById(R.id.buttonOk); + + buttonCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + + buttonOk.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + validateInput(); + } + }); + } + + //TODO VERIFY EACH EDIT TEXT + public void validateInput(){ + if(isEmptyEdit(name)){ + Toast.makeText(this, "You did not enter your name", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(firstname)){ + Toast.makeText(this, "You did not enter your firstname", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(email)){ + Toast.makeText(this, "You did not enter your email", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(confirmEmail)){ + Toast.makeText(this, "You did not confirm your email", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(password)){ + Toast.makeText(this, "You did not enter your password", Toast.LENGTH_SHORT).show(); + } else if(isEmptyEdit(confirmPassword)){ + Toast.makeText(this, "You did not confirm your password", Toast.LENGTH_SHORT).show(); + }else { + if(!(password.getText().toString().equals(confirmPassword.getText().toString()))){ + Toast.makeText(this, "Password don't match confirmation password", Toast.LENGTH_SHORT).show(); + }else if(!(email.getText().toString().equals(confirmEmail.getText().toString()))){ + Toast.makeText(this, "Email don't match confirmation email", Toast.LENGTH_SHORT).show(); + } else{ + User inputUser = new User(name.getText().toString(),firstname.getText().toString(),email.getText().toString(),password.getText().toString()); + insertUserLdap(inputUser); + } + } + } + + //TODO INSERT VALIDE USER INTO LDAP + public void insertUserLdap(User u){ + //CHECK IF USER ALREADY EXIST + + //IF USER DOESN'T EXIST, INSERT USER INTO LDAP + + //CHECK RESPONSE OR RESULT OF INSERT + + //IF SUCCESSFULLY INSERTED INTO LDAP CALL LAUNCHWALLET + + //TEMPORARY + if(checkUser(u.getEmail())){ + Toast.makeText(this, "User already have an account, please log in", Toast.LENGTH_SHORT).show(); + }else { + Toast.makeText(this, "INSERT", Toast.LENGTH_SHORT).show(); + launchWalletActivity(1); + } + } + + //TODO LAUNCH WALLET ACTIVITY + public void launchWalletActivity(int ldapId){; + //LAUNCH APP WALLET WITH ID USER + Intent walletIntent = new Intent(SignupActivity.this, WalletActivity.class); + walletIntent.putExtra("idUser", ldapId); + SignupActivity.this.startActivity(walletIntent); + finish(); + } + + private boolean isEmptyEdit(EditText etText) { + return etText.getText().toString().trim().length() == 0; + } + //TODO VERIFY IF INPUTED USER ALREADY EXIST IN LDAP + private boolean checkUser(Object mail){ + //Statement stmt = null; + //String query = "SELECT userId FROM USER_TABLE WHERE email="+mail; + return false; + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/TransactionActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/TransactionActivity.java new file mode 100644 index 0000000..be0a8c7 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/TransactionActivity.java @@ -0,0 +1,43 @@ +package com.example.monnthic.monnthicmobile; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +public class TransactionActivity extends AppCompatActivity { + + private EditText addressDestination; + private EditText Amout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_transaction); + addressDestination = findViewById(R.id.destination_address); + Amout = findViewById(R.id.amount); + Button buttonCancel = findViewById(R.id.btn_cancel); + Button buttonOk = findViewById(R.id.btn_send); + + buttonCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + + buttonOk.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + sendTransaction(); + } + }); + } + + public void sendTransaction(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } + +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/User.java b/app/src/main/java/com/example/monnthic/monnthicmobile/User.java new file mode 100644 index 0000000..465b625 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/User.java @@ -0,0 +1,51 @@ +package com.example.monnthic.monnthicmobile; + +/** + * Created by Guillaume on 15/04/2018. + */ + +public class User { + private String name; + private String firstname; + private String email; + private String password; + + public User(String name, String firstname, String email, String password) { + this.name = name; + this.firstname = firstname; + this.email = email; + this.password = password; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/UserAccountActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/UserAccountActivity.java new file mode 100644 index 0000000..5f35ec4 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/UserAccountActivity.java @@ -0,0 +1,56 @@ +package com.example.monnthic.monnthicmobile; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; + +public class UserAccountActivity extends AppCompatActivity { + private TextView solde; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_user_account); + + solde = findViewById(R.id.viewSolde); + Button buttonPayement = findViewById(R.id.buttonPayement); + Button buttonReceive = findViewById(R.id.buttonReceive); + Button buttonSettings = findViewById(R.id.buttonSettings); + + //refreshSolde(); + + buttonPayement.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + sendPayement(); + } + }); + buttonReceive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + receivePayement(); + } + }); + buttonSettings.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + settings(); + } + }); + } + public void sendPayement(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } + public void receivePayement(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } + public void settings(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } + public void refreshSolde(){ + solde.setText("0.00"); + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/WalletActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/WalletActivity.java new file mode 100644 index 0000000..bdeb872 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/WalletActivity.java @@ -0,0 +1,51 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +public class WalletActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wallet); + + Button buttonCreate = findViewById(R.id.buttonCreateWallet); + Button buttonRestore = findViewById(R.id.buttonRestoreWallet); + Button buttonSkip = findViewById(R.id.buttonSkip); + + buttonCreate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + createWallet(); + } + }); + buttonRestore.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + restoreWallet(); + } + }); + buttonSkip.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + skip(); + } + }); + } + public void skip(){ + Intent userIntent = new Intent(WalletActivity.this, UserAccountActivity.class); + WalletActivity.this.startActivity(userIntent); + finish(); + } + public void createWallet(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } + public void restoreWallet(){ + Toast.makeText(this, "Coming soon", Toast.LENGTH_SHORT).show(); + } +} diff --git a/app/src/main/java/com/example/monnthic/monnthicmobile/WalletPresenterActivity.java b/app/src/main/java/com/example/monnthic/monnthicmobile/WalletPresenterActivity.java new file mode 100644 index 0000000..b1bf438 --- /dev/null +++ b/app/src/main/java/com/example/monnthic/monnthicmobile/WalletPresenterActivity.java @@ -0,0 +1,63 @@ +package com.example.monnthic.monnthicmobile; + +import android.content.Intent; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import java.math.BigInteger; + +public class WalletPresenterActivity extends AppCompatActivity { + private EditText addressPublic; + private TextView balance; + private String address; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_wallet_presenter); + addressPublic = findViewById(R.id.address_pub); + balance = findViewById(R.id.balance); + Button refreshBalance = findViewById(R.id.refreshBalance); + Button buttonSendTransaction = findViewById(R.id.send_transaction); + Intent intent = getIntent(); + address = intent.getStringExtra("WALLET_ADDRESS"); + + addressPublic.setText(address); + + if(initiateBalance(address)==null){ + balance.setText("Error"); + }else{ + balance.setText(initiateBalance(address).toString()); + } + + buttonSendTransaction.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + launchTransactionActivity(); + } + }); + + refreshBalance.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + initiateBalance(address); + } + }); + } + + public void launchTransactionActivity(){ + Intent transactionIntent = new Intent(WalletPresenterActivity.this, TransactionActivity.class); + WalletPresenterActivity.this.startActivity(transactionIntent); + } + + public BigInteger initiateBalance(String address){ + AccessBlockchain ab = new AccessBlockchain(); + System.out.println("addresse "+ address); + BigInteger balanceIs = ab.getTheBalanceOfWallet(address); + return balanceIs; + } +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/logo.PNG b/app/src/main/res/drawable/logo.PNG new file mode 100644 index 0000000000000000000000000000000000000000..788c8a27bd40e32c0160b42a53c1dbfc6d54bca5 GIT binary patch literal 68161 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 X+8#ESAcp`S|KB`a{an^LB{Ts5Oz$1T literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_2fa.xml b/app/src/main/res/layout/activity_2fa.xml new file mode 100644 index 0000000..d8fb324 --- /dev/null +++ b/app/src/main/res/layout/activity_2fa.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_demo_wallet.xml b/app/src/main/res/layout/activity_demo_wallet.xml new file mode 100644 index 0000000..76604c8 --- /dev/null +++ b/app/src/main/res/layout/activity_demo_wallet.xml @@ -0,0 +1,45 @@ + + + +