diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index cc607b73..b5ef5bb6 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index 238cc401..15cdb33f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,7 +76,7 @@ android { } stag { manifestPlaceholders.fileProvider = "com.gmeremit.online.gmeremittance_native.stag.fileprovider" - applicationIdSuffix ".stag" +// applicationIdSuffix ".stag" signingConfig signingConfigs.debug buildConfigField 'String', 'BASE_URL', '"http://gmeuat.gmeremit.com:5022/api/"' buildConfigField 'String', 'API_VERSION', '"v1"' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a086d08a..e1248073 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -119,4 +119,5 @@ -dontwarn rx.** -dontwarn retrofit.** --keep class android.support.v7.widget.** { *; } \ No newline at end of file +-keep class android.support.v7.widget.** { *; } + diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrefKeys.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrefKeys.java index fa85fac8..c39c93db 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrefKeys.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrefKeys.java @@ -43,6 +43,7 @@ public class PrefKeys { public static final String USER_LOGGED_IN_STATUS = "LOGGED_IN_STATUS"; public static final String USER_DOB = "USER_DOB_V2"; + public static final String HAS_PROMPTED_USER_FOR_FINGERPRINT_FIRST_TIME = "HAS_PROMPTED_USER_FOR_FINGERPRINT_FIRST_TIME"; public static String USER_LAST_INITIATED_PENNY_TEST_MESSAGE="USER_LAST_INITIATED_PENNY_TEST_MESSAGE"; public static String USER_PREFERRED_LOCALE ="USER_PREFERRED_LOCALE"; public static String USER_PREFERRED_LANGUAGE ="USER_PREFERRED_LANGUAGE"; diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java index 9b3516e6..ccbd37a3 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGateway.java @@ -225,5 +225,8 @@ public abstract class PrivilegedGateway implements PrivilegedGatewayInterface { editor.apply(); } - + @Override + public String getCustomerRewardPoint() { + return GmeApplication.getStorage().getString(PrefKeys.USER_REWAD_POINT,""); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java index 3d3a77b7..d785cf29 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/base/PrivilegedGatewayInterface.java @@ -79,4 +79,5 @@ public interface PrivilegedGatewayInterface extends BaseGatewayInterface { void flushBiometricData(); + String getCustomerRewardPoint(); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/gateway/HomeV2Gateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/gateway/HomeV2Gateway.java index aa21b0e7..08f1973f 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/gateway/HomeV2Gateway.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/gateway/HomeV2Gateway.java @@ -114,6 +114,10 @@ public class HomeV2Gateway extends PrivilegedGateway implements HomeV2Interactor GmeApplication.getStorage().edit().putBoolean(PrefKeys.USER_KYC_VERIFIED, action).apply(); } + @Override + public boolean hasPromptedUserForFingerprintFirstTime() { + return GmeApplication.getStorage().getBoolean(PrefKeys.HAS_PROMPTED_USER_FOR_FINGERPRINT_FIRST_TIME, false); + } @Override diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2InteractorInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2InteractorInterface.java index 178e6f31..476c70c4 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2InteractorInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2InteractorInterface.java @@ -24,5 +24,7 @@ public interface HomeV2InteractorInterface extends BaseInteractorInterface { void updateVerifiedUserInCache(boolean action); + boolean hasPromptedUserForFingerprintFirstTime(); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java index b7a05270..760b60f2 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2Presenter.java @@ -15,6 +15,7 @@ import com.gmeremit.online.gmeremittance_native.utils.Constants; import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants; import com.gmeremit.online.gmeremittance_native.utils.https.SessionExpiredException; import com.gmeremit.online.gmeremittance_native.utils.https.UserSessionObserverResponse; +import com.gmeremit.online.gmeremittance_native.utils.security.SecurityUtils; import com.google.firebase.iid.FirebaseInstanceId; import java.util.concurrent.TimeUnit; @@ -34,15 +35,17 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt private final HomeV2GatewayInterface gateway; private final CompositeDisposable compositeDisposable; private final BehaviorSubject homeFragmentRelatedSubject; + private final boolean shouldCheckFingerprintPrompt; private boolean shouldNotPromptAppUpdate; - public HomeV2Presenter(HomeV2PresenterInterface.HomeV2ContractInterface view) { + public HomeV2Presenter(HomeV2ContractInterface view, boolean checkFingerprintPromptScreen) { this.view = view; this.gateway = new HomeV2Gateway(this); this.compositeDisposable = new CompositeDisposable(); this.homeFragmentRelatedSubject = BehaviorSubject.create(); this.gateway.addPrivilegedGatewayDataObserver(this); this.shouldNotPromptAppUpdate=false; + this.shouldCheckFingerprintPrompt=checkFingerprintPromptScreen; } @@ -89,8 +92,7 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt @Override public void manuallyUpdateKYCForStatusToSubmitted() { -// String kycMessage = "Your registration request is in approval process. You will soon be able to use GME services."; -// String kycTitle = "Verification in Process"; + String kycMessage = getStringfromStringId(R.string.verification_in_aproval_process_text); String kycTitle = getStringfromStringId(R.string.kyc_verify_pending_text); view.showKYCVerifiedIfRequired(true, kycMessage, kycTitle, true, null); @@ -100,9 +102,6 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt public void manullyUpdateKYCToSubmittedAndShowPennyTest() { gateway.updateSubmittedKycInCache(true); gateway.updateVerifiedUserInCache(false); -// String pennyTestTitle = "Continue the registration process"; -// String pennyTestMessage = "Please verify your primary bank account to complete the registration."; - String pennyTestTitle = getStringfromStringId(R.string.penny_test_pending_text); String pennyTestMessage = getStringfromStringId(R.string.complete_penny_test); view.showKYCVerifiedIfRequired(false, "", "", true, () -> view.showPennyTestViewIfRequired(true, pennyTestTitle, pennyTestMessage)); @@ -112,13 +111,6 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt public String checkIfUserVerified() { String resultMessage = null; String pennyTestStatus = gateway.getPennyTestStatus(); -// if (!gateway.hasUserSubmittedKYC()) -// resultMessage = "Kindly complete your registration process with us to start using GME services"; -// else if (pennyTestStatus != null && pennyTestStatus.length() > 0 && !pennyTestStatus.equalsIgnoreCase("2")) -// resultMessage = "Please verify your primary bank account to complete the registration"; -// else if (!gateway.isUserKYCVerified()) -// resultMessage = "Your registration request is in approval process. You will soon be able to use GME services"; - if (!gateway.hasUserSubmittedKYC()) resultMessage = getStringfromStringId(R.string.complete_your_registration_text); else if (pennyTestStatus != null && pennyTestStatus.length() > 0 && !pennyTestStatus.equalsIgnoreCase("2")) @@ -155,6 +147,16 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt return this.shouldNotPromptAppUpdate; } + @Override + public void checkIfFingerprintPromptShouldBeShown() { + if(shouldCheckFingerprintPrompt) + { + if(!gateway.hasPromptedUserForFingerprintFirstTime()&&SecurityUtils.checkFingerPrintUsablity(view.getContext()) && !gateway.isFingerPrintAuthEnabled() && gateway.getPersistedUserId() != null && gateway.getPersistedUserPwd() != null) + view.showFingerprintAvailablityToUser(); + + } + } + private Observable getDataFromServerAndSaveIt() { String fcmID; try { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2PresenterInterface.java index bd9bec33..5edabff1 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2PresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/presenter/HomeV2PresenterInterface.java @@ -1,5 +1,7 @@ package com.gmeremit.online.gmeremittance_native.homeV2.presenter; +import android.content.Context; + import com.gmeremit.online.gmeremittance_native.base.BaseContractInterface; import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; @@ -29,6 +31,8 @@ public interface HomeV2PresenterInterface extends BasePresenterInterface { boolean shouldNotPromptAppUpdate(); + void checkIfFingerprintPromptShouldBeShown(); + interface HomeV2ContractInterface extends BaseContractInterface { @@ -43,5 +47,9 @@ public interface HomeV2PresenterInterface extends BasePresenterInterface { void showPennyTestViewIfRequired(boolean showView, String pennyTestTitle, String pennyTestMessage); void showUpdateScreen(String build, String info,boolean isForcedUpdate); + + Context getContext(); + + void showFingerprintAvailablityToUser(); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java index af7cca5b..a880f4d6 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/view/HomeActivityV2.java @@ -42,6 +42,7 @@ import com.gmeremit.online.gmeremittance_native.recipientV2.view.recipientlistin import com.gmeremit.online.gmeremittance_native.resendV2.view.ReSendMoneyV2Activity; import com.gmeremit.online.gmeremittance_native.resendV2.view.TransactionListingV2Activity; import com.gmeremit.online.gmeremittance_native.resetpassV2.view.ResetPassV2Activity; +import com.gmeremit.online.gmeremittance_native.settings.view.FingerprintEnablePromptActivity; import com.gmeremit.online.gmeremittance_native.settings.view.SettingsView; import com.gmeremit.online.gmeremittance_native.static_pages.view.AboutGME; import com.gmeremit.online.gmeremittance_native.static_pages.view.SupportActivity; @@ -89,6 +90,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra private HomeV2PresenterInterface presenter; private static int WITHDRAW_AMOUNT_REQUEST_CODE =24943; private static int SEND_MONEY_REQUEST_CODE =24944; + public static final String PROMPT_FINGERPRINT_BUNDLE_FLAG="bundleKeyPromptFlag"; @Override protected void onCreate(Bundle savedInstanceState) { @@ -102,13 +104,14 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra private void initialize() { manager = getSupportFragmentManager(); - presenter = new HomeV2Presenter(this); + presenter = new HomeV2Presenter(this,getIntent().getBooleanExtra(PROMPT_FINGERPRINT_BUNDLE_FLAG,false)); } private void performDefaultAction(Bundle savedInstanceState) { if (savedInstanceState == null) { loadHomeAsCurrentView(); presenter.getRequiredData(); + presenter.checkIfFingerprintPromptShouldBeShown(); } } @@ -401,6 +404,18 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra } + @Override + public Context getContext() { + return this; + } + + @Override + public void showFingerprintAvailablityToUser() { + Intent intent=new Intent(this, FingerprintEnablePromptActivity.class); + startActivity(intent); + + } + @Override public void performLogout() { presenter.clearAllData(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java index 08b4b39f..c540d8aa 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/loginV2/view/LoginV2Activity.java @@ -403,6 +403,7 @@ public class LoginV2Activity extends BaseActivity implements View.OnClickListene public void redirectToDashboard() { Intent intent = new Intent(this, HomeActivityV2.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra(HomeActivityV2.PROMPT_FINGERPRINT_BUNDLE_FLAG,true); startActivity(intent); finish(); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/OrderListingRvAdapter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/OrderListingRvAdapter.java index 4fb5326d..f39fdcc2 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/OrderListingRvAdapter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/OrderListingRvAdapter.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import android.widget.TextView; import com.gmeremit.online.gmeremittance_native.R; +import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardOrderedProductItemModel; import java.util.ArrayList; import java.util.List; @@ -18,7 +19,7 @@ import butterknife.ButterKnife; public class OrderListingRvAdapter extends RecyclerView.Adapter { private final OrderItemSelectionListener listener; - private List data; + private ArrayList data; public OrderListingRvAdapter(OrderItemSelectionListener listener) { this.listener = listener; @@ -34,6 +35,12 @@ public class OrderListingRvAdapter extends RecyclerView.Adapter data) { + public void setData(ArrayList data) { if (data != null && data.size() > 0) { this.data = data; notifyDataSetChanged(); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/RewardListingRvAdapter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/RewardListingRvAdapter.java index 1e0b9601..de1f8ef0 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/RewardListingRvAdapter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/adapter/rewardlisting/RewardListingRvAdapter.java @@ -14,6 +14,7 @@ import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.homeV2.adapters.HomeMenuRvAdapterV2; import com.gmeremit.online.gmeremittance_native.homeV2.model.MenuItem; import com.gmeremit.online.gmeremittance_native.homeV2.view.HomeMenuItemViewHolderV2; +import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardProductItemModel; import java.util.ArrayList; import java.util.List; @@ -24,7 +25,7 @@ import butterknife.ButterKnife; public class RewardListingRvAdapter extends RecyclerView.Adapter { private final RewardCLickListener listener; - private List data; + private List data; public RewardListingRvAdapter(RewardCLickListener listener) { this.listener = listener; @@ -41,15 +42,14 @@ public class RewardListingRvAdapter extends RecyclerView.Adapter data) + public void setData(ArrayList data) { if(data!=null&&data.size()>0) { this.data = data; diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/gateway/rewardlisting/RewardListingV2Gateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/gateway/rewardlisting/RewardListingV2Gateway.java index 29af8357..e1458d47 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/gateway/rewardlisting/RewardListingV2Gateway.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/gateway/rewardlisting/RewardListingV2Gateway.java @@ -27,8 +27,8 @@ public class RewardListingV2Gateway extends PrivilegedGateway implements RewardL JsonObject jsonObject=new JsonObject(); jsonObject.addProperty("userId",userId); - jsonObject.addProperty("startDate","2019-04-01"); - jsonObject.addProperty("endDate","2019-04-17"); + jsonObject.addProperty("startDate",startDate); + jsonObject.addProperty("endDate",endDate); return HttpClientV2.getInstance().getRewardOrderedProductList(auth,jsonObject); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2Presenter.java index 25e72490..982457b5 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2Presenter.java @@ -1,17 +1,21 @@ package com.gmeremit.online.gmeremittance_native.rewardV2.presenter.rewardlisting; +import android.util.Log; + import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BasePresenter; import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import com.gmeremit.online.gmeremittance_native.rewardV2.gateway.rewardlisting.RewardListingV2Gateway; import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardOrderedProductItemModel; import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardProductItemModel; +import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponse; import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel; import com.gmeremit.online.gmeremittance_native.utils.https.HTTPConstants; import com.gmeremit.online.gmeremittance_native.utils.https.HttpClientV2; import com.google.gson.reflect.TypeToken; import java.io.IOException; +import java.lang.reflect.Array; import java.lang.reflect.Type; import java.net.SocketTimeoutException; import java.util.ArrayList; @@ -55,28 +59,61 @@ public class RewardListingV2Presenter extends BasePresenter implements RewardLis } @Override - public Observable> subscribeToRewardFetchingEvent() { + public Observable> getOrderedProductList(String startDate, String endDate) { + return this.gateway.getRewardOrderedProductList(this.gateway.getAuth(), this.gateway.getUserID(), startDate, endDate) + .subscribeOn(Schedulers.io()) + .doOnSubscribe(subs -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text))) + .doFinally(() -> view.showProgressBar(false, "")) + .doOnError(error -> { + if (error instanceof HttpException && ((HttpException) error).code() == 401) { + gateway.clearAllUserData(); + } + }) + .flatMap(response -> { + TypeToken productType = TypeToken.getParameterized(GenericResponseDataModel.class, ArrayList.class, RewardOrderedProductItemModel.class); + GenericResponseDataModel> data = HttpClientV2.getDeserializer().fromJson(response.string(), productType.getType()); + + return Observable.just(data.getData()); + }).observeOn(AndroidSchedulers.mainThread()); + } + + @Override + public Observable> subscribeToRewardFetchingEvent() { return rewardRelatedDataSubject.flatMap(rewardRelatedData -> Observable.just(rewardRelatedData.getRewardProductItemModels())); } @Override - public Observable> subscribeToOrderListFetchingEvent() { + public Observable> subscribeToOrderListFetchingEvent() { return rewardRelatedDataSubject.flatMap(rewardRelatedData -> Observable.just(rewardRelatedData.getRewardOrderedProductItemModels())); } + @Override + public String getCurrentRewardPoint() { + return gateway.getCustomerRewardPoint(); + } + - private Observable> getAllProductListFromNetwork() { - TypeToken productType = TypeToken.getParameterized(GenericResponseDataModel.class, List.class, RewardProductItemModel.class); + private Observable> getAllProductListFromNetwork() { + Type productType = new TypeToken>>() { + }.getType(); return this.gateway.getRewardProductList(this.gateway.getAuth()) .subscribeOn(Schedulers.io()) - .flatMap(response -> HttpClientV2.getDeserializer().fromJson(response.string(), productType.getType())); + .flatMap(response -> { + GenericResponseDataModel> data = HttpClientV2.getDeserializer().fromJson(response.string(), productType); + Log.d("RewardModule", data.getData().get(0).getProductName()); + return Observable.just(data.getData()); + }); } - private Observable> getAllOrderedProductListFromNetwork() { - TypeToken productType = TypeToken.getParameterized(GenericResponseDataModel.class, List.class, RewardOrderedProductItemModel.class); - return this.gateway.getRewardOrderedProductList(this.gateway.getAuth(),this.gateway.getUserID(),"","") + private Observable> getAllOrderedProductListFromNetwork() { + Type productType = new TypeToken>>() { + }.getType(); + return this.gateway.getRewardOrderedProductList(this.gateway.getAuth(), this.gateway.getUserID(), "", "") .subscribeOn(Schedulers.io()) - .flatMap(response -> HttpClientV2.getDeserializer().fromJson(response.string(), productType.getType())); + .flatMap(response -> { + GenericResponseDataModel> data = HttpClientV2.getDeserializer().fromJson(response.string(), productType); + return Observable.just(data.getData()); + }); } @Override @@ -90,20 +127,20 @@ public class RewardListingV2Presenter extends BasePresenter implements RewardLis compositeDisposable.dispose(); } - public class RewardListingScreenModel { - List rewardProductItemModels; - List rewardOrderedProductItemModels; + public static class RewardListingScreenModel { + ArrayList rewardProductItemModels; + ArrayList rewardOrderedProductItemModels; - public RewardListingScreenModel(List rewardProductItemModels, List rewardOrderedProductItemModels) { + public RewardListingScreenModel(ArrayList rewardProductItemModels, ArrayList rewardOrderedProductItemModels) { this.rewardProductItemModels = rewardProductItemModels; this.rewardOrderedProductItemModels = rewardOrderedProductItemModels; } - public List getRewardProductItemModels() { + public ArrayList getRewardProductItemModels() { return rewardProductItemModels; } - public List getRewardOrderedProductItemModels() { + public ArrayList getRewardOrderedProductItemModels() { return rewardOrderedProductItemModels; } @@ -114,15 +151,18 @@ public class RewardListingV2Presenter extends BasePresenter implements RewardLis @Override public void onNext(RewardListingScreenModel rewardListingScreenModel) { rewardRelatedDataSubject.onNext(rewardListingScreenModel); + view.lazyInstatiateView(); } @Override public void onError(Throwable e) { String errorMessage = ""; if (e instanceof HttpException) { - if (((HttpException) e).code() == 401) + if (((HttpException) e).code() == 401) { errorMessage = (HTTPConstants.getErrorMessageFromCode(((HttpException) e).code())); - else + gateway.clearAllUserData(); + view.showPopUpMessage(errorMessage, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); + } else errorMessage = (HTTPConstants.getErrorMessageFromCode(((HttpException) e).code())); } else if (e instanceof SocketTimeoutException) { errorMessage = (HTTPConstants.HTTP_RESPONSE_NO_INTERNET); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2PresenterInterface.java index 7a06692c..50fdac04 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2PresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/presenter/rewardlisting/RewardListingV2PresenterInterface.java @@ -5,6 +5,7 @@ import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardOrderedProductItemModel; import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardProductItemModel; +import java.util.ArrayList; import java.util.List; import io.reactivex.Observable; @@ -14,8 +15,12 @@ public interface RewardListingV2PresenterInterface extends BasePresenterInterfac void fetchRewards(); - Observable> subscribeToRewardFetchingEvent(); - Observable> subscribeToOrderListFetchingEvent(); + Observable> getOrderedProductList(String startDate,String endDate); + + Observable> subscribeToRewardFetchingEvent(); + Observable> subscribeToOrderListFetchingEvent(); + + String getCurrentRewardPoint(); interface RewardListingV2ContractInterface extends BaseContractInterface { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/OrderHistoryFragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/OrderHistoryFragment.java index c9dc6b6b..23c00dbc 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/OrderHistoryFragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/OrderHistoryFragment.java @@ -3,30 +3,55 @@ package com.gmeremit.online.gmeremittance_native.rewardV2.view.rewardlisting; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; import com.gmeremit.online.gmeremittance_native.rewardV2.adapter.rewardlisting.OrderListingRvAdapter; import com.gmeremit.online.gmeremittance_native.rewardV2.model.rewardlisting.RewardOrderedProductItemModel; import com.gmeremit.online.gmeremittance_native.rewardV2.view.RewardParentActionListener; +import com.gmeremit.online.gmeremittance_native.utils.Utils; 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.HTTPConstants; +import com.gmeremit.online.gmeremittance_native.walletstatementV2.view.WalletStatementV2Activity; +import com.tsongkha.spinnerdatepicker.DatePicker; +import com.tsongkha.spinnerdatepicker.DateRangePickerDialog; +import com.tsongkha.spinnerdatepicker.SpinnerDateRangePickerDialogBuilder; + +import java.io.IOException; +import java.net.SocketTimeoutException; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; +import retrofit2.HttpException; -public class OrderHistoryFragment extends BaseFragment implements OrderListingRvAdapter.OrderItemSelectionListener { +public class OrderHistoryFragment extends BaseFragment implements OrderListingRvAdapter.OrderItemSelectionListener, View.OnClickListener { @BindView(R.id.orderListRv) RecyclerView orderListRv; + @BindView(R.id.tv_from_date) + TextView fromDateTv; + + @BindView(R.id.tv_to_date) + TextView toDateTv; + + @BindView(R.id.dateContainer) + View dateContainer; + + @BindView(R.id.iv_calendar) + View calendarView; + private CompositeDisposable compositeDisposable; private OrderListObserver orderListObserver; @@ -55,7 +80,7 @@ public class OrderHistoryFragment extends BaseFragment implements OrderListingR } private void setupRv() { - orderListAdapter=new OrderListingRvAdapter(this); + orderListAdapter = new OrderListingRvAdapter(this); orderListRv.setAdapter(orderListAdapter); } @@ -70,6 +95,18 @@ public class OrderHistoryFragment extends BaseFragment implements OrderListingR } + @Override + public void onStart() { + super.onStart(); + calendarView.setOnClickListener(this); + } + + @Override + public void onStop() { + super.onStop(); + calendarView.setOnClickListener(null); + + } @Override public void onDestroy() { @@ -78,17 +115,101 @@ public class OrderHistoryFragment extends BaseFragment implements OrderListingR compositeDisposable.dispose(); } + private void promptCalendarPicker() { + new SpinnerDateRangePickerDialogBuilder() + .context(getActivity()) + .spinnerTheme(R.style.NumberPickerStyle) + .showTitle(true) + .showDaySpinner(true) + .defaultDate(1990, 0, 1) + .setCurrentDateAsMaxDate() + .minDate(2017, 9, 10) + .dialogTheme(R.style.DatePickerTheme) + .showTitle(true) + .setTitle(getString(R.string.filter_by_date_text)) + .setFromTitle(getString(R.string.from_text) + " :") + .setToTitle(getString(R.string.to_text) + " :") + .setPositiveButtonText(getString(R.string.ok_text)) + .setNegativeButtonText(getString(R.string.cancel_text)) + .callback(new DateRangePickerDialog.OnRangeDateSetListener() { + private String startDate = ""; + private String endDate = ""; + + @Override + public void onFromDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { + startDate = Integer.toString(year) + "-" + Integer.toString(monthOfYear + 1) + "-" + Integer.toString(dayOfMonth); + fromDateTv.setText(Utils.formateDateFromstring(Utils.getDefaultDateFormat(), "MMM d, yyyy", startDate)); + } + + @Override + public void onToDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { + endDate = Integer.toString(year) + "-" + Integer.toString(monthOfYear + 1) + "-" + Integer.toString(dayOfMonth); + toDateTv.setText(Utils.formateDateFromstring(Utils.getDefaultDateFormat(), "MMM d, yyyy", endDate)); + + + } + + @Override + public void onInvalidRangeSelected() { + showToastMessage(getString(R.string.invalid_date_range_selected)); + } + + @Override + public void onDateRangeReceivedSucess() { + if (dateContainer.getVisibility() != View.VISIBLE) + dateContainer.setVisibility(View.VISIBLE); + fetchOrderedList(startDate, endDate); + + } + }) + .build() + .show(); + } + + + private void fetchOrderedList(String startDate, String endDate) { - public class OrderListObserver extends DisposableObserver> { + compositeDisposable.add( + ((RewardParentActionListener) getActivity()).getPresenter().getOrderedProductList(startDate, endDate).subscribeWith(new OrderListObserver()) + ); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_calendar: + promptCalendarPicker(); + break; + } + } + + + public class OrderListObserver extends DisposableObserver> { @Override - public void onNext(List rewardOrderedProductItemModels) { + public void onNext(ArrayList rewardOrderedProductItemModels) { + orderListAdapter.setData(rewardOrderedProductItemModels); } @Override public void onError(Throwable e) { - + String errorMessage = ""; + if (e instanceof HttpException) { + if (((HttpException) e).code() == 401) { + errorMessage = (HTTPConstants.getErrorMessageFromCode(((HttpException) e).code())); + showPopUpMessage(errorMessage, CustomAlertDialog.AlertType.ALERT, alertType -> logout()); + } else + errorMessage = (HTTPConstants.getErrorMessageFromCode(((HttpException) e).code())); + } else if (e instanceof SocketTimeoutException) { + errorMessage = (HTTPConstants.HTTP_RESPONSE_NO_INTERNET); + } else if (e instanceof IOException) { + errorMessage = (HTTPConstants.HTTP_RESPONSE_NO_INTERNET); + } else { + errorMessage = (e.getMessage()); + } + + showPopUpMessage(errorMessage, CustomAlertDialog.AlertType.FAILED, alertType -> exitView()); } @Override diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListFragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListFragment.java index 55b708f4..93e298c9 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListFragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListFragment.java @@ -2,10 +2,13 @@ package com.gmeremit.online.gmeremittance_native.rewardV2.view.rewardlisting; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseFragment; @@ -17,6 +20,7 @@ import com.gmeremit.online.gmeremittance_native.rewardV2.view.RewardParentAction import com.gmeremit.online.gmeremittance_native.utils.https.GenericApiObserverResponseV2; import com.gmeremit.online.gmeremittance_native.utils.https.GenericResponseDataModel; +import java.util.ArrayList; import java.util.List; import butterknife.BindView; @@ -30,12 +34,16 @@ public class RewardListFragment extends BaseFragment implements RewardListingRvA @BindView(R.id.rewards_rv) RecyclerView rewardsRV; + @BindView(R.id.txt_reward_points) + TextView txt_reward_points; + private RewardListingRvAdapter rewardListingRvAdapter; private RewardListObserver rewardlistObserver; private CompositeDisposable compositeDisposable; + @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_reward_list, container, false); @@ -51,7 +59,9 @@ public class RewardListFragment extends BaseFragment implements RewardListingRvA private void performDefaultAction(Bundle savedInstanceState) { if (savedInstanceState == null) { + txt_reward_points.setText(((RewardParentActionListener) getActivity()).getPresenter().getCurrentRewardPoint()); compositeDisposable.add(((RewardParentActionListener) getActivity()).getPresenter().subscribeToRewardFetchingEvent().subscribeWith(rewardlistObserver)); + } } @@ -65,6 +75,7 @@ public class RewardListFragment extends BaseFragment implements RewardListingRvA private void setupRv() { rewardListingRvAdapter = new RewardListingRvAdapter(this); rewardsRV.setAdapter(rewardListingRvAdapter); + rewardsRV.setLayoutManager(new GridLayoutManager(getActivity(),2)); } @@ -81,12 +92,12 @@ public class RewardListFragment extends BaseFragment implements RewardListingRvA } - public class RewardListObserver extends DisposableObserver>{ + public class RewardListObserver extends DisposableObserver>{ @Override - public void onNext(List rewardOrderedProductItemModels) { - + public void onNext(ArrayList rewardProductItemModels) { + rewardListingRvAdapter.setData(rewardProductItemModels); } @Override diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListingV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListingV2Activity.java index d628c558..87c6b8a6 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListingV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/rewardV2/view/rewardlisting/RewardListingV2Activity.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import butterknife.BindView; +import butterknife.ButterKnife; public class RewardListingV2Activity extends BaseActivity implements RewardListingV2PresenterInterface.RewardListingV2ContractInterface, RewardParentActionListener { @@ -39,6 +40,7 @@ public class RewardListingV2Activity extends BaseActivity implements RewardListi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reward_listing_v2); + ButterKnife.bind(this); initialize(); performDefaultAction(savedInstanceState); } @@ -86,7 +88,6 @@ public class RewardListingV2Activity extends BaseActivity implements RewardListi - viewPager.setOffscreenPageLimit(2); viewPager.setAdapter(rewardlistingViewPagerAdapter); diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java index 2e117589..3c53fe86 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/settings/view/FingerprintEnablePromptActivity.java @@ -5,6 +5,7 @@ import android.os.Handler; import android.support.graphics.drawable.AnimatedVectorDrawableCompat; import android.os.Bundle; import android.view.View; +import android.view.Window; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -45,6 +46,10 @@ public class FingerprintEnablePromptActivity extends BaseActivity implements Vie super.onCreate(savedInstanceState); setContentView(R.layout.activity_fingerprint_enable_prompt); ButterKnife.bind(this); + Window window = getWindow(); + if (window != null) { + window.getAttributes().windowAnimations = R.style.SlideInAnimation; + } init(); performDefaultAction(savedInstanceState); } @@ -68,21 +73,22 @@ public class FingerprintEnablePromptActivity extends BaseActivity implements Vie } void performDefaultAction(Bundle savedInstance) { - playFingerPrintAnimation(0); + playFingerPrintAnimation(350); - String manual = getString(R.string.setting_text) + " >> "+ getString(R.string.fingerprint_auth_text); + String manual = getString(R.string.setting_text) + " >> " + getString(R.string.fingerprint_auth_text); tv_manual.setText(manual); + GmeApplication.getStorage().edit().putBoolean(PrefKeys.HAS_PROMPTED_USER_FOR_FINGERPRINT_FIRST_TIME,true).apply(); + } private boolean isBiometricDataAvailable() { SharedPreferences sp = GmeApplication.getStorage(); - return sp.getString(PrefKeys.APP_USER_ID_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_USER_SECRET_KEY, null) != null&&sp.getString(PrefKeys.APP_SECRET_KEY,null)!=null; + return sp.getString(PrefKeys.APP_USER_ID_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_USER_SECRET_KEY, null) != null && sp.getString(PrefKeys.APP_SECRET_KEY, null) != null; } - private void showFingerprintAuthDialog() - { + private void showFingerprintAuthDialog() { if (isBiometricDataAvailable()) { FingerPrintAuthPromptDialog fingerPrintAuthPromptDialog = new FingerPrintAuthPromptDialog(); fingerPrintAuthPromptDialog.setFingerprintAuthListener(true, new FingerPrintAuthPromptDialog.FingerprintAuthListener() { @@ -157,13 +163,13 @@ public class FingerprintEnablePromptActivity extends BaseActivity implements Vie @Override public void onClick(View v) { - switch(v.getId()) { + switch (v.getId()) { - case R.id.btn_use_fingerprint : + case R.id.btn_use_fingerprint: showFingerprintAuthDialog(); break; - case R.id.txt_not_use_fingerprint : + case R.id.txt_not_use_fingerprint: finish(); break; } diff --git a/app/src/main/res/layout/fragment_reward_list.xml b/app/src/main/res/layout/fragment_reward_list.xml index 7089781a..a7fecc55 100644 --- a/app/src/main/res/layout/fragment_reward_list.xml +++ b/app/src/main/res/layout/fragment_reward_list.xml @@ -52,7 +52,6 @@ android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:singleLine="false" - android:text="9999999999" android:textColor="@color/white" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="@+id/imageView6" @@ -87,7 +86,6 @@ android:id="@+id/rewards_rv" android:layout_width="match_parent" android:layout_height="0dp" - app:layoutManager="android.support.v7.widget.GridLayoutManager" android:layout_weight="1" android:paddingEnd="14dp" android:paddingStart="14dp" /> diff --git a/app/src/stag/google-services.json b/app/src/stag/google-services.json index 74593ff3..c53a6b3b 100644 --- a/app/src/stag/google-services.json +++ b/app/src/stag/google-services.json @@ -10,7 +10,7 @@ "client_info": { "mobilesdk_app_id": "1:739883569758:android:5b4ad7782aa80f79", "android_client_info": { - "package_name": "com.gmeremit.online.gmeremittance_native.stag" + "package_name": "com.gmeremit.online.gmeremittance_native" } }, "oauth_client": [ @@ -18,7 +18,7 @@ "client_id": "739883569758-ie4mgucpasd3mtjt217u22lliiec8rva.apps.googleusercontent.com", "client_type": 1, "android_info": { - "package_name": "com.gmeremit.online.gmeremittance_native.stag", + "package_name": "com.gmeremit.online.gmeremittance_native", "certificate_hash": "899e8b46832d0e33ea0b16c07a16f5a12aececd2" } },