diff --git a/app/build.gradle b/app/build.gradle index 838217e..92b3254 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,13 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +kapt { + generateStubs = true + javacOptions { + option("-Xmaxerrs", 500) + } +} android { compileSdkVersion 27 @@ -43,6 +52,7 @@ dependencies { androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" //testCompile 'com.android.support.test:runner:1.0.1' implementation 'com.afollestad.material-dialogs:core:0.9.6.0' //DTVV Thrusday 31 July 2018 implementation 'com.android.support:appcompat-v7:27.1.1' @@ -52,7 +62,6 @@ dependencies { implementation 'com.android.support.constraint:constraint-layout:1.1.2' implementation 'android.arch.lifecycle:runtime:1.1.1' implementation 'android.arch.lifecycle:extensions:1.1.1' - implementation 'android.arch.persistence.room:runtime:1.1.0' implementation 'android.arch.paging:runtime:1.0.0' implementation 'com.idescout.sql:sqlscout-server:2.0' implementation 'com.google.code.gson:gson:2.8.0' @@ -72,8 +81,15 @@ dependencies { //testCompile 'junit:junit: 4.12' testImplementation 'org.mockito:mockito-core:1.10.19' + implementation 'android.arch.persistence.room:runtime:1.1.0' + + kapt 'android.arch.persistence.room:runtime:1.1.0' annotationProcessor 'android.arch.lifecycle:compiler:1.1.1' + kapt 'android.arch.lifecycle:compiler:1.1.1' + annotationProcessor 'android.arch.lifecycle:compiler:1.1.1' + kapt 'android.arch.persistence.room:compiler:1.1.0' annotationProcessor 'android.arch.persistence.room:compiler:1.1.0' + kapt 'com.jakewharton:butterknife-compiler:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.squareup.picasso:picasso:2.5.2' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a5182a0..ba2bf0d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,13 +31,12 @@ + + - - diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/BackupSeedActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/BackupSeedActivity.java index 60c25f6..15b7d6b 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/BackupSeedActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/BackupSeedActivity.java @@ -7,13 +7,10 @@ import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; -import android.graphics.Point; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; -import android.view.Display; import android.widget.Button; -import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @@ -23,6 +20,7 @@ import butterknife.OnClick; import cy.agorise.crystalwallet.R; import cy.agorise.crystalwallet.models.AccountSeed; import cy.agorise.crystalwallet.viewmodels.AccountSeedViewModel; + //tvBrainKey public class BackupSeedActivity extends AppCompatActivity { diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/CreateSeedActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/CreateSeedActivity.java deleted file mode 100644 index b589a72..0000000 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/CreateSeedActivity.java +++ /dev/null @@ -1,337 +0,0 @@ -package cy.agorise.crystalwallet.activities; - -import android.arch.lifecycle.ViewModelProviders; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.support.design.widget.TextInputLayout; -import android.text.Editable; -import android.view.inputmethod.InputMethodManager; -import android.widget.Button; -import android.widget.Toast; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import butterknife.OnTextChanged; -import cy.agorise.crystalwallet.R; -import cy.agorise.crystalwallet.dialogs.material.LoadingDialog; -import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequestListener; -import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequests; -import cy.agorise.crystalwallet.requestmanagers.ValidateCreateBitsharesAccountRequest; -import cy.agorise.crystalwallet.models.GrapheneAccount; -import cy.agorise.crystalwallet.viewmodels.AccountSeedViewModel; -import cy.agorise.crystalwallet.viewmodels.validators.customImpl.interfaces.UIValidatorListener; -import cy.agorise.crystalwallet.viewmodels.validators.customImpl.validationFields.BitsharesAccountNameValidation; -import cy.agorise.crystalwallet.viewmodels.validators.customImpl.validationFields.CustomValidationField; -import cy.agorise.crystalwallet.viewmodels.validators.customImpl.validationFields.PinDoubleConfirmationValidationField; -import cy.agorise.crystalwallet.views.natives.CustomTextInputEditText; - - - -/* -* Commented code backup -* -* -* alertBuilder.setTitle("Processing"); - alertBuilder.setMessage("Creating Bitshares Account"); - - ------ - - AlertDialog.Builder alertBuilder = new AlertDialog.Builder(CreateSeedActivity.this,R.style.AppTheme); - alertBuilder.setView(R.layout.progress_creating_account); - final AlertDialog processDialog = alertBuilder.create(); - CreateSeedActivity.this.runOnUiThread(new Runnable() { //Run on UI Thread - @Override - public void run() { - processDialog.setCancelable(false); - processDialog.show(); - processDialog.getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - } - }); - - */ - - - - - -public class CreateSeedActivity extends CustomActivity { - - AccountSeedViewModel accountSeedViewModel; - - @BindView(R.id.tilPin) - TextInputLayout tilPin; - - @BindView(R.id.tietPin) - CustomTextInputEditText tietPin; - - @BindView(R.id.tilPinConfirmation) - TextInputLayout tilPinConfirmation; - - @BindView(R.id.tietPinConfirmation) - CustomTextInputEditText tietPinConfirmation; - - @BindView(R.id.tilAccountName) - TextInputLayout tilAccountName; - - @BindView (R.id.tietAccountName) - CustomTextInputEditText tietAccountName; - - @BindView(R.id.btnCreate) - Button btnCreate; - - @BindView(R.id.btnCancel) - Button btnCancel; - - - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.create_seed); - - /* - * Initialice butterknife MVC - * */ - ButterKnife.bind(this); - - /*This button should not be enabled till all the fields be correctly filled*/ - disableCreate(); - - /* - * Add the controls to the validator - * */ - this.fieldsValidator.add(tietPin); - this.fieldsValidator.add(tietPinConfirmation); - this.fieldsValidator.add(tietAccountName); - - /* - * Validations listener - * */ - final UIValidatorListener uiValidatorListener = new UIValidatorListener() { - - @Override - public void onValidationSucceeded(final CustomValidationField customValidationField) { - - try{ - - /* - * Remove error - * */ - runOnUiThread(new Runnable() { - - @Override - public void run() { - final CustomTextInputEditText customTextInputEditText = (CustomTextInputEditText) customValidationField.getCurrentView(); - customTextInputEditText.setError(null); - } - }); - - }catch (Exception e){ - e.printStackTrace(); - } - - - /* - * Validate if can continue - * */ - validateFieldsToContinue(); - } - - @Override - public void onValidationFailed(final CustomValidationField customValidationField) { - - /* - * Set error label - * */ - runOnUiThread(new Runnable() { - - @Override - public void run() { - final CustomTextInputEditText customTextInputEditText = (CustomTextInputEditText) customValidationField.getCurrentView(); - customTextInputEditText.setError(customTextInputEditText.getFieldValidatorModel().getMessage()); - } - }); - } - }; - - /* - * Create the pin double validation - * */ - final PinDoubleConfirmationValidationField pinDoubleConfirmationValidationField = new PinDoubleConfirmationValidationField(this,tietPin,tietPinConfirmation,uiValidatorListener); - - /* - * Listener for the validation for success or fail - * */ - tietPin.setUiValidator(pinDoubleConfirmationValidationField); //Validator for the field - tietPinConfirmation.setUiValidator(pinDoubleConfirmationValidationField); //Validator for the field - - /* - * Account name validator - * */ - final BitsharesAccountNameValidation bitsharesAccountNameValidation = new BitsharesAccountNameValidation(this,tietAccountName,uiValidatorListener); - bitsharesAccountNameValidation.setOnAccountExist(new BitsharesAccountNameValidation.OnAccountExist() { - @Override - public void onAccountExists() { - - runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(globalActivity,getResources().getString(R.string.account_name_already_exist), Toast.LENGTH_LONG).show(); - } - }); - } - }); - tietAccountName.setUiValidator(bitsharesAccountNameValidation); - - /* - * This button initially is not enabled til all the field validation be ok - * */ - disableCreate(); - - accountSeedViewModel = ViewModelProviders.of(this).get(AccountSeedViewModel.class); - - /* - * Set the focus on the fisrt field and show keyboard - * */ - tilPin.requestFocus(); - final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(tilPin, InputMethodManager.SHOW_IMPLICIT); - } - - @OnTextChanged(value = R.id.tietPin, - callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) - void afterPinChanged(Editable editable) { - this.fieldsValidator.validate(); - - /* - * Validate continue to create account - * */ - validateFieldsToContinue(); - } - @OnTextChanged(value = R.id.tietPinConfirmation, - callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) - void afterPinConfirmationChanged(Editable editable) { - this.fieldsValidator.validate(); - - /* - * Validate continue to create account - * */ - validateFieldsToContinue(); - } - @OnTextChanged(value = R.id.tietAccountName, - callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) - void afterAccountNameChanged(Editable editable) { - this.fieldsValidator.validate(); - - /* - * Always disable till the server response comes - * */ - disableCreate(); - } - - - @OnClick(R.id.btnCancel) - public void cancel(){ - - /* - * Exit of the activity - * */ - this.finish(); - } - - @OnClick(R.id.btnCreate) - public void createSeed(){ - - // Make request to create a bitshare account - final ValidateCreateBitsharesAccountRequest request = - new ValidateCreateBitsharesAccountRequest(tietAccountName.getText().toString(), getApplicationContext()); - - - //DTVV: Friday 27 July 2018 - //Makes dialog to tell the user that the account is been created - final LoadingDialog creatingAccountMaterialDialog = new LoadingDialog(this); - creatingAccountMaterialDialog.setMessage(this.getResources().getString(R.string.window_create_seed_DialogMessage)); - creatingAccountMaterialDialog.build(); - CreateSeedActivity.this.runOnUiThread(new Runnable() { - @Override - public void run() { - creatingAccountMaterialDialog.show(); - } - }); - request.setListener(new CryptoNetInfoRequestListener() { - @Override - public void onCarryOut() { - creatingAccountMaterialDialog.dismiss(); - if (request.getStatus().equals(ValidateCreateBitsharesAccountRequest.StatusCode.SUCCEEDED)) { - GrapheneAccount accountSeed = request.getAccount(); - Intent intent = new Intent(getApplicationContext(), BackupSeedActivity.class); - intent.putExtra("SEED_ID", accountSeed.getId()); - startActivity(intent); - } else { - fieldsValidator.validate(); - } - } - }); - - Thread thread = new Thread() { - @Override - public void run() { - CryptoNetInfoRequests.getInstance().addRequest(request); - } - }; - - thread.start(); - } - - - - /* - * Validate that all is complete to continue to create - * */ - private void validateFieldsToContinue(){ - - boolean result = false; //Contains the final result - - boolean pinValid = this.tietPin.getFieldValidatorModel().isValid(); - boolean pinConfirmationValid = this.tietPinConfirmation.getFieldValidatorModel().isValid(); - boolean pinAccountNameValid = this.tietAccountName.getFieldValidatorModel().isValid(); - - if(pinValid && - pinConfirmationValid && - pinAccountNameValid){ - result = true; //Validation is correct - } - - - - /* - * If the result is true so the user can continue to the creation of the account - * */ - if(result){ - enableCreate(); - } - else{ - disableCreate(); - } - } - - - /* - * Enable create button - * */ - private void enableCreate(){ - btnCreate.setEnabled(true); - btnCreate.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); - } - - /* - * Disable create button - * */ - private void disableCreate(){ - btnCreate.setEnabled(false); - btnCreate.setBackground(getResources().getDrawable(R.drawable.disable_style)); - } -} diff --git a/app/src/main/java/cy/agorise/crystalwallet/activities/PinRequestActivity.java b/app/src/main/java/cy/agorise/crystalwallet/activities/PinRequestActivity.java index a95210a..df9e430 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/activities/PinRequestActivity.java +++ b/app/src/main/java/cy/agorise/crystalwallet/activities/PinRequestActivity.java @@ -7,21 +7,16 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.text.Editable; -import android.widget.Button; import android.widget.EditText; -import android.widget.TextView; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import butterknife.OnClick; import butterknife.OnTextChanged; import cy.agorise.crystalwallet.R; -import cy.agorise.crystalwallet.models.AccountSeed; import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.util.PasswordManager; -import cy.agorise.crystalwallet.viewmodels.AccountSeedViewModel; import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel; public class PinRequestActivity extends AppCompatActivity { diff --git a/app/src/main/java/cy/agorise/crystalwallet/fragments/PinSecurityFragment.java b/app/src/main/java/cy/agorise/crystalwallet/fragments/PinSecurityFragment.java index edfaea9..c5d298c 100644 --- a/app/src/main/java/cy/agorise/crystalwallet/fragments/PinSecurityFragment.java +++ b/app/src/main/java/cy/agorise/crystalwallet/fragments/PinSecurityFragment.java @@ -1,16 +1,13 @@ package cy.agorise.crystalwallet.fragments; import android.arch.lifecycle.LiveData; -import android.arch.lifecycle.Observer; import android.arch.lifecycle.ViewModelProviders; import android.os.Bundle; -import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.Editable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @@ -21,9 +18,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnTextChanged; import cy.agorise.crystalwallet.R; -import cy.agorise.crystalwallet.activities.CreateSeedActivity; import cy.agorise.crystalwallet.application.CrystalSecurityMonitor; -import cy.agorise.crystalwallet.dao.CrystalDatabase; import cy.agorise.crystalwallet.models.GeneralSetting; import cy.agorise.crystalwallet.util.PasswordManager; import cy.agorise.crystalwallet.viewmodels.GeneralSettingListViewModel; diff --git a/app/src/main/java/cy/agorise/crystalwallet/viewmodels/AccountSeedViewModel.java b/app/src/main/java/cy/agorise/crystalwallet/viewmodels/AccountSeedViewModel.java deleted file mode 100644 index bb546a4..0000000 --- a/app/src/main/java/cy/agorise/crystalwallet/viewmodels/AccountSeedViewModel.java +++ /dev/null @@ -1,39 +0,0 @@ -package cy.agorise.crystalwallet.viewmodels; - -import android.app.Application; -import android.arch.lifecycle.AndroidViewModel; -import android.arch.lifecycle.LiveData; - -import cy.agorise.crystalwallet.dao.CrystalDatabase; -import cy.agorise.crystalwallet.models.AccountSeed; - -/** - * Created by Henry Varona on 27/9/2017. - */ - -public class AccountSeedViewModel extends AndroidViewModel { - - private LiveData accountSeed; - private CrystalDatabase db; - private Application app; - - public AccountSeedViewModel(Application application) { - super(application); - this.db = CrystalDatabase.getAppDatabase(application.getApplicationContext()); - this.app = application; - } - - public void loadSeed(long seedId){ - this.accountSeed = this.db.accountSeedDao().findByIdLiveData(seedId); - } - - public void addSeed(AccountSeed seed){ - long newId = this.db.accountSeedDao().insertAccountSeed(seed); - seed.setId(newId); - } - - public LiveData getAccountSeed(){ - return this.accountSeed; - } - -} diff --git a/app/src/main/res/layout/send_transaction.xml b/app/src/main/res/layout/send_transaction.xml index 168ae41..0dc5811 100644 --- a/app/src/main/res/layout/send_transaction.xml +++ b/app/src/main/res/layout/send_transaction.xml @@ -74,6 +74,7 @@ android:inputType="text" android:textSize="20sp" android:hint="@string/to_capital" + android:maxLength="255" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/gravatar" />