diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index a587ff1d..15d05933 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index db241e38..6f0fa66e 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 2996d531..efb0da98 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,6 +8,15 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dc38e186..532d92b2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -340,7 +340,7 @@ android:theme="@style/AppTheme.NoActionBar" android:windowSoftInputMode="stateAlwaysHidden" /> diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java index bf40e880..d6330d36 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/sendmoneyV2/view/SendMoneyV2Activity.java @@ -16,14 +16,14 @@ import com.gmeremit.online.gmeremittance_native.sendmoneyV2.model.SendMoneyRequi import com.gmeremit.online.gmeremittance_native.sendmoneyV2.presenter.SendMoneyV2Presenter; import com.gmeremit.online.gmeremittance_native.sendmoneyV2.presenter.SendMoneyV2PresenterInterface; import com.gmeremit.online.gmeremittance_native.transactionpasspromt.PasswordPromptListener; -import com.gmeremit.online.gmeremittance_native.transactionpasspromt.TransactionPasswordPromptActivity; +import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity; import butterknife.BindView; import butterknife.ButterKnife; import static com.gmeremit.online.gmeremittance_native.recipientV2.view.recipientadd.RecipientAddV2Activity.RECIPIENT_INFO_BUNDLE_KEY; -import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.TransactionPasswordPromptActivity.PAYMENT_TYPE_BUNDLE_KEY; -import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.TransactionPasswordPromptActivity.TRANSACTION_PWD_ENC_DATA; +import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.PAYMENT_TYPE_BUNDLE_KEY; +import static com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionPasswordPromptActivity.TRANSACTION_PWD_ENC_DATA; public class SendMoneyV2Activity extends BaseActivity implements SendMoneyActionListener, SendMoneyV2PresenterInterface.SendMoneyV2ContractInterface, View.OnClickListener { @@ -266,7 +266,7 @@ public class SendMoneyV2Activity extends BaseActivity implements SendMoneyAction String paymentType=presenter.getPaymentType(); this.passwordPromptListener=listener; Intent passwordRequestIntent=new Intent(this, TransactionPasswordPromptActivity.class); - passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY,""); + passwordRequestIntent.putExtra(PAYMENT_TYPE_BUNDLE_KEY,paymentType); startActivityForResult(passwordRequestIntent,PASSWORD_PROMPT_REQUEST); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/gateway/TransactionPasswordPromptV2Gateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/gateway/TransactionPasswordPromptV2Gateway.java new file mode 100644 index 00000000..8d7418d9 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/gateway/TransactionPasswordPromptV2Gateway.java @@ -0,0 +1,22 @@ +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.gateway; + +import com.gmeremit.online.gmeremittance_native.base.PrivilegedGateway; +import com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter.TransactionPasswordPromptV2InteractorInterface; +import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2; + +import io.reactivex.Observable; +import okhttp3.ResponseBody; + +public class TransactionPasswordPromptV2Gateway extends PrivilegedGateway implements TransactionPasswordPromptV2InteractorInterface.TransactionPasswordPromptV2GatewayInterface { + + private final TransactionPasswordPromptV2InteractorInterface interactor; + + public TransactionPasswordPromptV2Gateway(TransactionPasswordPromptV2InteractorInterface interactor) { + this.interactor=interactor; + } + + @Override + public Observable requestOtp(String auth, String Uid) { + return HttpClientV2.getInstance().requestOTPForSendMoney(auth,Uid); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2InteractorInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2InteractorInterface.java new file mode 100644 index 00000000..74c740b5 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2InteractorInterface.java @@ -0,0 +1,15 @@ +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter; + +import com.gmeremit.online.gmeremittance_native.base.BaseInteractorInterface; +import com.gmeremit.online.gmeremittance_native.base.PrivilegedGatewayInterface; + +import io.reactivex.Observable; +import okhttp3.ResponseBody; + +public interface TransactionPasswordPromptV2InteractorInterface extends BaseInteractorInterface { + + interface TransactionPasswordPromptV2GatewayInterface extends PrivilegedGatewayInterface + { + Observable requestOtp(String auth, String Uid); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java new file mode 100644 index 00000000..d8b2922e --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2Presenter.java @@ -0,0 +1,95 @@ +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter; + +import android.os.Handler; + +import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; +import com.gmeremit.online.gmeremittance_native.base.BasePresenter; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; +import com.gmeremit.online.gmeremittance_native.transactionpasspromt.gateway.TransactionPasswordPromptV2Gateway; +import com.gmeremit.online.gmeremittance_native.utils.Constants; +import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2; +import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel; +import com.gmeremit.online.gmeremittance_native.utils.https.MessageResponseDataModel; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; + +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.schedulers.Schedulers; + +public class TransactionPasswordPromptV2Presenter extends BasePresenter implements TransactionPasswordPromptV2PresenterInterface,TransactionPasswordPromptV2InteractorInterface { + + private final TransactionPasswordPromptV2PresenterInterface.TransactionPasswordPromptV2ContractInterface view; + private final TransactionPasswordPromptV2InteractorInterface.TransactionPasswordPromptV2GatewayInterface gateway; + private final CompositeDisposable compositeDisposable; + + public TransactionPasswordPromptV2Presenter(TransactionPasswordPromptV2PresenterInterface.TransactionPasswordPromptV2ContractInterface view) { + this.view=view; + this.gateway=new TransactionPasswordPromptV2Gateway(this); + this.compositeDisposable = new CompositeDisposable(); + + } + + @Override + public void getOtp() { + this.compositeDisposable.add( + this.gateway.requestOtp(this.gateway.getAuth(),this.gateway.getUserID()) + .doOnSubscribe(disposable -> view.showProgressBar(true, "Requesting OTP...")) + .doFinally(() -> view.showProgressBar(false, "")) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeWith(new ResendRequestObserver()) + ); + +// new Handler().postDelayed(()->{ +// view.showPopUpMessage("Please check your mobile for OTP", CustomAlertDialog.AlertType.SUCCESS, alertType -> { +// view.showResendRequestView(false); +// view.startCountdownView(120000); +// }); +// },2000); + } + + + class ResendRequestObserver extends GenericApiObserverResponseV2 + { + + @Override + protected Type setType() { + return TypeToken.getParameterized(GenericResponseDataModel.class, MessageResponseDataModel.class).getType(); + } + + @Override + protected void onSuccess(GenericResponseDataModel response) { + if (response.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { + view.showPopUpMessage(response.getMsg(), CustomAlertDialog.AlertType.SUCCESS, alertType -> { + view.showResendRequestView(false); + view.startCountdownView(120000); + }); + } + else { + view.showPopUpMessage(response.getMsg(), CustomAlertDialog.AlertType.FAILED, alertType -> { + view.showResendRequestView(true); + }); + } + } + + @Override + public void onFailed(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, alertType -> view.exitView()); + } + + @Override + protected void onConnectionNotEstablished(String message) { + view.showPopUpMessage(message, CustomAlertDialog.AlertType.NO_INTERNET, null); + view.showResendRequestView(true); + + } + + @Override + protected void unauthorizedAccess(String message) { + gateway.clearAllUserData(); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); + } + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2PresenterInterface.java new file mode 100644 index 00000000..9822fb36 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/presenter/TransactionPasswordPromptV2PresenterInterface.java @@ -0,0 +1,13 @@ +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter; + +import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; +import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; + +public interface TransactionPasswordPromptV2PresenterInterface extends BasePresenterInterface { + void getOtp(); + + interface TransactionPasswordPromptV2ContractInterface extends BaseContractInterface { + void startCountdownView(int durationMillisecond); + void showResendRequestView(boolean action); + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptActivity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java similarity index 72% rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptActivity.java rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java index f8812d00..e72720bb 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptActivity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptActivity.java @@ -1,12 +1,19 @@ -package com.gmeremit.online.gmeremittance_native.transactionpasspromt; +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.view; import android.app.Activity; import android.content.Intent; import android.content.pm.ActivityInfo; +import android.graphics.Color; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; +import android.os.CountDownTimer; +import android.os.Handler; +import android.support.v4.content.ContextCompat; import android.support.v4.view.GestureDetectorCompat; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; @@ -20,16 +27,20 @@ import android.widget.TextView; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseActivity; import com.gmeremit.online.gmeremittance_native.customwidgets.GmeErrorTextView; +import com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter.TransactionPasswordPromptV2Presenter; +import com.gmeremit.online.gmeremittance_native.transactionpasspromt.presenter.TransactionPasswordPromptV2PresenterInterface; import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.EncryptionManager; import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardManager; import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeyboardView; import com.gmeremit.online.gmeremittance_native.utils.security.securitykeypad.SecurityKeypadRequestParamBuilder; import com.softsecurity.transkey.TransKeyActivity; +import java.util.Locale; + import butterknife.BindView; import butterknife.ButterKnife; -public class TransactionPasswordPromptActivity extends BaseActivity implements SecurityKeyboardView.SecurityKeyboardFocusStateListener { +public class TransactionPasswordPromptActivity extends BaseActivity implements SecurityKeyboardView.SecurityKeyboardFocusStateListener, TransactionPasswordPromptV2PresenterInterface.TransactionPasswordPromptV2ContractInterface, View.OnClickListener { SecurityKeyboardManager securityKeyboardManager; @@ -62,6 +73,8 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S public static final String TRANSACTION_PWD_ENC_DATA = "bundleKeyEncData"; public static final String PAYMENT_TYPE_BUNDLE_KEY = "bundleKeyPaymentType"; private String paymentType; + private TransactionPasswordPromptV2PresenterInterface presenter; + private CountDownTimer countDownTimer; @Override protected void onCreate(Bundle savedInstanceState) { @@ -86,6 +99,7 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S } private void init() { + presenter = new TransactionPasswordPromptV2Presenter(this); securityKeyboardView.setKeyboardContainerView(keypadContainer); securityKeyboardView.setKeyboardBallonView(ballonView); securityKeypadListener = new SecurityKeypadListener(); @@ -102,6 +116,7 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S request.setMaxLength(4); ballonView.setVisibility(View.INVISIBLE); resendRequest.setVisibility(View.VISIBLE); + } else { request.setHintString("Password"); title.setText(getString(R.string.enter_login_password_text)); @@ -121,10 +136,14 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S private void performDefaultAction(Bundle savedInstanceState) { securityKeyboardManager.showKeyboard(); + if (checkIfRequiredOTPScreen()) + new Handler().postDelayed(()->{ + presenter.getOtp(); + },400); + } - private boolean checkIfRequiredOTPScreen() - { + private boolean checkIfRequiredOTPScreen() { return paymentType.equalsIgnoreCase("autodebit"); } @@ -156,12 +175,16 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S protected void onStart() { super.onStart(); securityKeyboardView.setSecurityKeyboardFocusStateListener(this); + if(checkIfRequiredOTPScreen()) + resendRequest.setOnClickListener(this); } @Override protected void onStop() { super.onStop(); securityKeyboardView.setSecurityKeyboardFocusStateListener(null); + if(checkIfRequiredOTPScreen()) + resendRequest.setOnClickListener(null); } @@ -176,6 +199,67 @@ public class TransactionPasswordPromptActivity extends BaseActivity implements S } + @Override + public void startCountdownView(int durationMillisecond) { + countDownTimer = new CountDownTimer(durationMillisecond, 1000) { + + int redColor=ContextCompat.getColor(TransactionPasswordPromptActivity.this, R.color.colorPrimary); + int grayColor=ContextCompat.getColor(TransactionPasswordPromptActivity.this, R.color.darkgray2); + @Override + public void onTick(long millisUntilFinished) { + int seconds = (int) (millisUntilFinished / 1000); + + int hours = seconds / (60 * 60); + int tempMint = (seconds - (hours * 60 * 60)); + int minutes = tempMint / 60; + seconds = tempMint - (minutes * 60); + + String timeRemaining = String.format(Locale.US, "%02d", minutes) + + ":" + String.format(Locale.US, "%02d", seconds); + + Spannable tryInText = new SpannableString("Try again in "); + tryInText.setSpan(new ForegroundColorSpan(grayColor), 0, tryInText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + resendRequest.setText(tryInText); + + Spannable timeText = new SpannableString(timeRemaining); + timeText.setSpan(new ForegroundColorSpan(redColor), 0, timeText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + + resendRequest.append(timeText); + } + + @Override + public void onFinish() { + showResendRequestView(true); + } + }; + countDownTimer.start(); + } + + @Override + public void showResendRequestView(boolean action) { + if (resendRequest.getVisibility() != View.VISIBLE) + resendRequest.setVisibility(View.VISIBLE); + if (action) { + if (countDownTimer != null) + countDownTimer.cancel(); + resendRequest.setText("Resend OTP"); + resendRequest.setOnClickListener(this); + + } else { + resendRequest.setText(""); + resendRequest.setOnClickListener(null); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.resend_request: + this.presenter.getOtp(); + break; + } + } + class SecurityKeypadListener implements SecurityKeyboardManager.SecurityKeyboardActionListenerFacade { @Override public void done(Intent intent) { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptDialog.java similarity index 98% rename from app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptDialog.java rename to app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptDialog.java index 9d5cf17f..0a630b7b 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/TransactionPasswordPromptDialog.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/transactionpasspromt/view/TransactionPasswordPromptDialog.java @@ -1,4 +1,4 @@ -package com.gmeremit.online.gmeremittance_native.transactionpasspromt; +package com.gmeremit.online.gmeremittance_native.transactionpasspromt.view; import android.app.Dialog; import android.os.Bundle; diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/API_URL.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/API_URL.java index b4ebe15f..2472a591 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/API_URL.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/API_URL.java @@ -151,5 +151,6 @@ public class API_URL { public static final String PENNY_TEST_SUBMIT="v1/mobile/pennytest/getcertified"; public static final String FETCH_AUTO_DEBIT_DATA = "v2/kftc/GetKftcParameters/{userId}"; public static final String DELETE_AUTO_DEBIT_ACCOUNT = "v2/kftc/DeleteAccount/{userId}"; + public static final String REUQEST_SEND_MONEY_OTP = "v2/kftc/GetOTP/{userId}"; } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/ApiEndpoints.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/ApiEndpoints.java index 6f5b5746..9875c1b9 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/ApiEndpoints.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/utils/https/ApiEndpoints.java @@ -352,4 +352,8 @@ public interface ApiEndpoints { @POST(API_URL.DELETE_AUTO_DEBIT_ACCOUNT) @Headers("Content-Type: application/json") Observable deleteAutoDebitAccount(@Header("Authorization") String token, @Body() JsonObject jsonObject, @Path("userId") String userId); + + @POST(API_URL.REUQEST_SEND_MONEY_OTP) + @Headers("Content-Type: application/json") + Observable requestOTPForSendMoney(@Header("Authorization") String token, @Path("userId") String userId); } diff --git a/app/src/main/res/layout/activity_transaction_password_prompt.xml b/app/src/main/res/layout/activity_transaction_password_prompt.xml index 0ad5d484..a3bf40b0 100644 --- a/app/src/main/res/layout/activity_transaction_password_prompt.xml +++ b/app/src/main/res/layout/activity_transaction_password_prompt.xml @@ -61,15 +61,15 @@ android:id="@+id/resend_request" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:visibility="gone" + android:layout_gravity="center_horizontal" android:layout_marginStart="8dp" android:layout_marginTop="10dp" android:layout_marginEnd="8dp" - android:layout_gravity="center_horizontal" android:padding="10dp" android:text="@string/resend_request_text" android:textColor="@color/colorPrimary" - android:textSize="14sp" /> + android:textSize="14sp" + android:visibility="invisible" /> + + android:layout_height="match_parent" />