Santosh Bhandary
3 years ago
49 changed files with 1863 additions and 461 deletions
-
2app/src/main/java/com/swifttech/remit/jmecustomer/features/home/view/HomeFragmentV2.java
-
2app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/model/ExistingKYCRelatedDataDTO.java
-
10app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/presenter/ExistingKYCV3GatewayInterface.java
-
2app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/presenter/ExistingKYCV3ViewModel.java
-
2app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/view/ExistingKYCV3Activity.java
-
5app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/view/documents/ExistingKYCIDTypeFragment.java
-
42app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/view/personal/ExistingCustomerDetailFragment.java
-
55app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/view/personal/ExistingCustomerDetailViewLiveData.java
-
2app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/existingCustomer/view/termsAndConditions/ExistingKycTermsAndConditionFragment.java
-
10app/src/main/java/com/swifttech/remit/jmecustomer/features/kyc/newCustomer/presenter/KYCV3GatewayInterface.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/login/LoginViewModelFactory.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/login/presenter/LoginV2ViewModel.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/login/view/LoginV2Activity.java
-
113app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientlisting/view/recipientaddedit/BeneficiaryAddEditFragment.java
-
42app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientlisting/view/recipientaddedit/BeneficiaryTermsAndConditionFragment.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientlisting/view/recipientaddedit/RecipientAddEditActivity.java
-
29app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/RecipientAddEditBaseV3ViewModel.java
-
7app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/RecipientAddV3ContractInterface.java
-
300app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/RecipientDetailValidatorV3.java
-
1app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/RecipientPresenterInterface.java
-
27app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/add/RecipientAddV3ViewModel.java
-
21app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/presenter/recipientaddeditV3/edit/RecipientEditV3ViewModel.java
-
6app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3Fragment.java
-
34app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/BeneficiaryAddEditV3TermsFragment.java
-
65app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientaddeditV3/RecipientAddEditV3Activity.java
-
28app/src/main/java/com/swifttech/remit/jmecustomer/features/recipientmanagement/view/recipientlistingV3/RecipientListingV3Activity.java
-
1app/src/main/java/com/swifttech/remit/jmecustomer/features/registerv2/existingcustomer/view/ExistingCustomerRegisterV2Activity.java
-
3app/src/main/java/com/swifttech/remit/jmecustomer/features/registerv2/newcustomer/view/NewRegisterV2Activity.java
-
26app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/RenewIdViewModelFactory.java
-
45app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/gateway/RenewFileDownloadGateway.java
-
49app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/gateway/RenewIdV2Gateway.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/model/RenewIdApiResponse.java
-
48app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/model/RenewIdRequestDataDTO.java
-
8app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/presenter/RenewIdV2InteractorInterface.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/presenter/RenewIdV2Presenter.java
-
17app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/presenter/RenewIdV2PresenterInterface.java
-
262app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/presenter/RenewIdV2ViewModel.java
-
473app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/view/RenewIdActivity.java
-
139app/src/main/java/com/swifttech/remit/jmecustomer/features/renewId/view/RenewUserIdLiveData.java
-
4app/src/main/java/com/swifttech/remit/jmecustomer/features/sendmoney/view/SendMoneyV2Activity.java
-
14app/src/main/java/com/swifttech/remit/jmecustomer/features/webbrowser/WebBrowserFragmentV2.java
-
1app/src/main/java/com/swifttech/remit/jmecustomer/utils/https/API_URL.java
-
8app/src/main/java/com/swifttech/remit/jmecustomer/utils/https/ApiEndpoints.java
-
387app/src/main/res/layout/activity_renew_id_layout.xml
-
2app/src/main/res/layout/fragment_beneficiary_add_edit.xml
-
2app/src/main/res/layout/fragment_beneficiary_add_edit_v3.xml
-
1app/src/main/res/layout/fragment_existing_kyc_customer_detail.xml
-
2app/src/main/res/layout/layout_sendmoney_toolbar.xml
-
3app/src/main/res/values/strings.xml
@ -1,42 +0,0 @@ |
|||
package com.swifttech.remit.jmecustomer.features.recipientlisting.view.recipientaddedit; |
|||
|
|||
import android.os.Bundle; |
|||
import android.util.Log; |
|||
import android.view.View; |
|||
import android.webkit.WebView; |
|||
|
|||
import androidx.annotation.Nullable; |
|||
|
|||
import com.swifttech.remit.jmecustomer.features.webbrowser.WebBrowserFragmentV2; |
|||
import com.swifttech.remit.jmecustomer.features.webbrowser.model.WebRequestModel; |
|||
|
|||
import static com.swifttech.remit.jmecustomer.utils.Constants.JME_TERMS_N_CONDITIONS; |
|||
|
|||
public class BeneficiaryTermsAndConditionFragment extends WebBrowserFragmentV2 { |
|||
private static String TAG = BeneficiaryTermsAndConditionFragment.class.getSimpleName(); |
|||
private String currentLoadedUrl=""; |
|||
@Override |
|||
protected void doTask(WebRequestModel webRequestModel, WebView webView) { |
|||
if(webRequestModel!=null&&!currentLoadedUrl.equalsIgnoreCase(webRequestModel.getUrl())) { |
|||
this.currentLoadedUrl=webRequestModel.getUrl(); |
|||
webView.loadUrl(webRequestModel.getUrl()); |
|||
Log.d(this.getClass().getSimpleName(),currentLoadedUrl); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
protected void proceedButtonClicked() { |
|||
Log.d(TAG, "proceedButtonClicked: "); |
|||
} |
|||
|
|||
@Override |
|||
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { |
|||
super.onViewCreated(view, savedInstanceState); |
|||
showAcceptOption(true); |
|||
WebRequestModel webRequestModel = new WebRequestModel("", JME_TERMS_N_CONDITIONS,null); |
|||
setWebRequestData(webRequestModel); |
|||
loadWebView(); |
|||
|
|||
} |
|||
} |
|||
|
@ -1,4 +1,28 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId; |
|||
|
|||
class RenewIdViewModelFactory { |
|||
import androidx.annotation.NonNull; |
|||
import androidx.lifecycle.ViewModel; |
|||
import androidx.lifecycle.ViewModelProvider; |
|||
|
|||
import com.swifttech.remit.jmecustomer.features.login.gateway.LoginV2Gateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.gateway.RenewFileDownloadGateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.gateway.RenewIdV2Gateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.presenter.RenewIdV2PresenterInterface; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.presenter.RenewIdV2ViewModel; |
|||
|
|||
public class RenewIdViewModelFactory implements ViewModelProvider.Factory { |
|||
|
|||
private final RenewIdV2PresenterInterface.RenewIdContractInterface view; |
|||
|
|||
|
|||
public RenewIdViewModelFactory(RenewIdV2PresenterInterface.RenewIdContractInterface view) { |
|||
this.view = view; |
|||
} |
|||
|
|||
@SuppressWarnings("unchecked") |
|||
@NonNull |
|||
@Override |
|||
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) { |
|||
return (T) new RenewIdV2ViewModel(view, new RenewIdV2Gateway(), new RenewFileDownloadGateway(),new LoginV2Gateway()); |
|||
} |
|||
} |
@ -0,0 +1,45 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.gateway; |
|||
|
|||
import android.content.Context; |
|||
|
|||
import com.swifttech.remit.jmecustomer.base.PrivilegedGateway; |
|||
import com.swifttech.remit.jmecustomer.utils.https.HttpClientV2; |
|||
|
|||
import java.io.File; |
|||
import java.io.IOException; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
|
|||
import io.reactivex.Observable; |
|||
import okhttp3.ResponseBody; |
|||
import okio.BufferedSink; |
|||
import okio.Okio; |
|||
import retrofit2.Response; |
|||
|
|||
public class RenewFileDownloadGateway extends PrivilegedGateway { |
|||
public Observable<Response<ResponseBody>> downloadFile(String url) { |
|||
return HttpClientV2.getInstance().downloadFile(url); |
|||
} |
|||
|
|||
public File getTempFile(Context context, String fileName) throws IOException { |
|||
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); |
|||
File storageDir = context.getCacheDir(); |
|||
File image = File.createTempFile( |
|||
fileName+"_"+timeStamp, |
|||
".jpg", |
|||
storageDir |
|||
); |
|||
|
|||
return image; |
|||
} |
|||
|
|||
public File writeToFile(Response<ResponseBody> responseBody, File file) throws Exception { |
|||
|
|||
BufferedSink sink = Okio.buffer(Okio.sink(file)); |
|||
sink.writeAll(responseBody.body().source()); |
|||
sink.flush(); |
|||
sink.close(); |
|||
|
|||
return file; |
|||
} |
|||
} |
@ -1,4 +1,51 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.gateway; |
|||
|
|||
class RenewIdV2Gateway { |
|||
import com.swifttech.remit.jmecustomer.base.PrivilegedGateway; |
|||
import com.swifttech.remit.jmecustomer.features.kyc.existingCustomer.model.ExistingPersonalInfoDTO; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.model.RenewIdRequestDataDTO; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.presenter.RenewIdV2InteractorInterface; |
|||
import com.swifttech.remit.jmecustomer.utils.https.HttpClientV2; |
|||
|
|||
import java.io.File; |
|||
import java.util.HashMap; |
|||
|
|||
import io.reactivex.Observable; |
|||
import okhttp3.MediaType; |
|||
import okhttp3.MultipartBody; |
|||
import okhttp3.RequestBody; |
|||
import okhttp3.ResponseBody; |
|||
|
|||
public class RenewIdV2Gateway extends PrivilegedGateway implements RenewIdV2InteractorInterface.RenewIdV2GatewayInterface { |
|||
|
|||
@Override |
|||
public Observable<ResponseBody> renewUserId(String auth, RenewIdRequestDataDTO requestBody) { |
|||
HashMap<String, RequestBody> map = new HashMap<>(); |
|||
map.put("userId", createStringUploadValue(requestBody.getUserId())); |
|||
|
|||
File idFront = null; |
|||
File idBack = null; |
|||
|
|||
if (requestBody.getIdFront() != null) { |
|||
|
|||
idFront = requestBody.getIdFront(); |
|||
idBack = requestBody.getIdBack(); |
|||
} |
|||
|
|||
return HttpClientV2.getInstance().postRenewUserId(auth, map, |
|||
createImageUploadFieldFromFile("idFront", idFront), |
|||
createImageUploadFieldFromFile("idBack", idBack) |
|||
); |
|||
} |
|||
private RequestBody createStringUploadValue(String value) { |
|||
|
|||
return RequestBody.create(MediaType.parse("text/plain"), value); |
|||
} |
|||
|
|||
private MultipartBody.Part createImageUploadFieldFromFile(String key, File file) { |
|||
|
|||
if (file == null) |
|||
return null; |
|||
RequestBody idImageRequest = RequestBody.create(MediaType.parse("image/jpeg"), file); |
|||
return MultipartBody.Part.createFormData(key, file.getName() + ".jpeg", idImageRequest); |
|||
} |
|||
} |
@ -1,4 +0,0 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.model; |
|||
|
|||
class RenewIdApiResponse { |
|||
} |
@ -0,0 +1,48 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.model; |
|||
|
|||
import com.swifttech.remit.jmecustomer.utils.Utils; |
|||
|
|||
import java.io.File; |
|||
|
|||
public class RenewIdRequestDataDTO { |
|||
String userId; |
|||
File idFront; |
|||
File idBack; |
|||
|
|||
public String getUserId() { |
|||
return userId; |
|||
} |
|||
|
|||
public void setUserId(String userId) { |
|||
this.userId = userId; |
|||
} |
|||
|
|||
public File getIdFront() { |
|||
return idFront; |
|||
} |
|||
|
|||
public void setIdFront(File idFront) { |
|||
this.idFront = idFront; |
|||
} |
|||
|
|||
public File getIdBack() { |
|||
return idBack; |
|||
} |
|||
|
|||
public void setIdBack(File idBack) { |
|||
this.idBack = idBack; |
|||
} |
|||
|
|||
public boolean isUserIdValid() { |
|||
return Utils.isStringNotNullOrEmpty(this.userId); |
|||
} |
|||
|
|||
public boolean isFrontIdImageFileValid() { |
|||
return idFront != null; |
|||
} |
|||
|
|||
public boolean isBackIdImageFileValid() { |
|||
return idBack != null; |
|||
} |
|||
|
|||
} |
@ -1,4 +0,0 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.presenter; |
|||
|
|||
class RenewIdV2Presenter { |
|||
} |
@ -0,0 +1,262 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.presenter; |
|||
|
|||
import com.swifttech.remit.jmecustomer.R; |
|||
import com.swifttech.remit.jmecustomer.base.BaseViewModel; |
|||
import com.swifttech.remit.jmecustomer.common.customwidgets.CustomAlertDialog; |
|||
import com.swifttech.remit.jmecustomer.common.model.FormInputStateDTO; |
|||
import com.swifttech.remit.jmecustomer.features.login.gateway.LoginV2Gateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.gateway.RenewFileDownloadGateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.gateway.RenewIdV2Gateway; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.model.RenewIdRequestDataDTO; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.view.RenewIdActivity; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.view.RenewUserIdLiveData; |
|||
import com.swifttech.remit.jmecustomer.utils.Constants; |
|||
import com.swifttech.remit.jmecustomer.utils.ImageUtils; |
|||
import com.swifttech.remit.jmecustomer.utils.https.GenericApiObserverResponseV2; |
|||
import com.swifttech.remit.jmecustomer.utils.https.GenericResponseDataModel; |
|||
import com.swifttech.remit.jmecustomer.utils.https.MessageResponseDataModel; |
|||
|
|||
import java.io.File; |
|||
|
|||
import io.reactivex.Observable; |
|||
import io.reactivex.android.schedulers.AndroidSchedulers; |
|||
import io.reactivex.disposables.CompositeDisposable; |
|||
import io.reactivex.observers.DisposableObserver; |
|||
import io.reactivex.schedulers.Schedulers; |
|||
|
|||
import static android.app.Activity.RESULT_OK; |
|||
|
|||
public class RenewIdV2ViewModel extends BaseViewModel implements RenewIdV2PresenterInterface { |
|||
private final RenewIdContractInterface view; |
|||
private final RenewIdV2Gateway renewIdV2Gateway; |
|||
private final RenewFileDownloadGateway renewFileDownloadGateway; |
|||
private final LoginV2Gateway loginGateway; |
|||
private final CompositeDisposable compositeDisposable; |
|||
private final RenewUserIdLiveData renewUserIdLiveData; |
|||
private RenewUserIdLiveData.RenewUserIdBinding viewBindings; |
|||
private RenewUserIdValidator validator; |
|||
private String userId; |
|||
|
|||
|
|||
private static final int THUMBNAIL_HEIGHT = 150; |
|||
private static final int THUMBNAIL_WIDTH = 150; |
|||
|
|||
public RenewIdV2ViewModel( |
|||
RenewIdContractInterface view, |
|||
RenewIdV2Gateway renewIdV2Gateway, |
|||
RenewFileDownloadGateway renewFileDownloadGateway, |
|||
LoginV2Gateway loginGateWay |
|||
|
|||
) { |
|||
this.compositeDisposable = new CompositeDisposable(); |
|||
renewUserIdLiveData = new RenewUserIdLiveData(); |
|||
this.view = view; |
|||
this.renewIdV2Gateway = renewIdV2Gateway; |
|||
this.renewFileDownloadGateway = renewFileDownloadGateway; |
|||
this.loginGateway = loginGateWay; |
|||
this.validator=new RenewUserIdValidator(new RenewIdRequestDataDTO()); |
|||
|
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void renewUserId() { |
|||
postUserIdToServer(validator.getRenewIdRequestDataDTO(), view::onRenewUserIdSuccess); |
|||
} |
|||
|
|||
private void postUserIdToServer(RenewIdRequestDataDTO renewIdRequestDataDTO, Runnable endWithTask) { |
|||
userId = renewIdRequestDataDTO.getUserId(); |
|||
compositeDisposable.add( |
|||
this.renewIdV2Gateway.renewUserId(renewIdV2Gateway.getAuth(), renewIdRequestDataDTO) |
|||
.doOnSubscribe(d -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text))) |
|||
.subscribeOn(Schedulers.io()) |
|||
.observeOn(AndroidSchedulers.mainThread()) |
|||
.doFinally(() -> view.showProgressBar(false, "")) |
|||
.subscribeWith(new RewNewIdUploadObserver(endWithTask)) |
|||
); |
|||
} |
|||
|
|||
public class RewNewIdUploadObserver extends GenericApiObserverResponseV2<MessageResponseDataModel> { |
|||
|
|||
Runnable task; |
|||
|
|||
public RewNewIdUploadObserver(Runnable task) { |
|||
this.task = task; |
|||
} |
|||
|
|||
@Override |
|||
protected void onSuccess(GenericResponseDataModel<MessageResponseDataModel> t) { |
|||
|
|||
if (t.getErrorCode().equalsIgnoreCase(Constants.SUCCESS_CODE_V2)) { |
|||
if (task != null) { |
|||
loginGateway.updateUserId(userId); |
|||
if (task != null) |
|||
task.run(); |
|||
} |
|||
|
|||
} else |
|||
view.showPopUpMessage(t.getMsg(), CustomAlertDialog.AlertType.FAILED, null); |
|||
} |
|||
|
|||
@Override |
|||
public void onFailed(String message) { |
|||
view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); |
|||
} |
|||
|
|||
@Override |
|||
protected void onConnectionNotEstablished(String message) { |
|||
view.showPopUpMessage(message, CustomAlertDialog.AlertType.FAILED, null); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
protected void unauthorizedAccess(String message) { |
|||
renewIdV2Gateway.clearAllUserData(); |
|||
view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); |
|||
|
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void checkImageStatus(int requestCode, int resultCode, File data) { |
|||
if (data == null) { |
|||
view.showToastMessage(getStringfromStringId(R.string.no_image_available_text)); |
|||
return; |
|||
} |
|||
switch (requestCode) { |
|||
case RenewIdActivity.CAMERA_REQUEST_ID_FRONT: |
|||
case RenewIdActivity.GALLERY_REQUEST_ID_FRONT: |
|||
if (resultCode == RESULT_OK) { |
|||
if (validator.validateUserFrontImg(data)) |
|||
renewUserIdLiveData.setRenewIdFrontImgLiveData(new FormInputStateDTO<>(true, null, ImageUtils.generateThumbnailFromImageFile(data.getAbsolutePath(), THUMBNAIL_HEIGHT, THUMBNAIL_WIDTH))); |
|||
else |
|||
renewUserIdLiveData.setRenewIdFrontImgLiveData(new FormInputStateDTO<>(false, view.getContext().getResources().getString(R.string.imageLoadingFailed_text), null)); |
|||
} |
|||
break; |
|||
|
|||
case RenewIdActivity.CAMERA_REQUEST_ID_BACK: |
|||
case RenewIdActivity.GALLERY_REQUEST_ID_BACK: |
|||
if (resultCode == RESULT_OK) { |
|||
if (validator.validateUserBackImg(data)) |
|||
renewUserIdLiveData.setRenewIdBackImgLiveData(new FormInputStateDTO<>(true, null, ImageUtils.generateThumbnailFromImageFile(data.getAbsolutePath(), THUMBNAIL_HEIGHT, THUMBNAIL_WIDTH))); |
|||
else |
|||
renewUserIdLiveData.setRenewIdBackImgLiveData(new FormInputStateDTO<>(false, view.getContext().getResources().getString(R.string.imageLoadingFailed_text), null)); |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void renewIdSuccessPopup() { |
|||
view.showPopUpMessage(view.getContext().getResources().getString(R.string.renewIdSucess_text), CustomAlertDialog.AlertType.SUCCESS, alertType -> view.exitReneUserIdView()); |
|||
} |
|||
|
|||
@Override |
|||
public RenewUserIdLiveData bindRenewUserIdForm(RenewUserIdLiveData.RenewUserIdBinding binding) { |
|||
bindRenewUserIdView(binding); |
|||
return renewUserIdLiveData; |
|||
} |
|||
|
|||
@Override |
|||
public void onViewDestroyed() { |
|||
super.onViewDestroyed(); |
|||
if (compositeDisposable != null && !compositeDisposable.isDisposed()) |
|||
compositeDisposable.dispose(); |
|||
} |
|||
|
|||
private void bindRenewUserIdView(RenewUserIdLiveData.RenewUserIdBinding viewBindings) { |
|||
this.viewBindings = viewBindings; |
|||
compositeDisposable.add( |
|||
Observable.combineLatest( |
|||
viewBindings.getUserIdResultObservable().map(validator::validateUserId), |
|||
viewBindings.getIdFrontRenewResultObservable(), |
|||
viewBindings.getIdBackRenewResultObservable(), |
|||
(isUserIdValid, isFrontIdPictureValid, isBackIdPictureValid) -> |
|||
isUserIdValid && isFrontIdPictureValid && isBackIdPictureValid |
|||
).subscribeWith(new DisposableObserver<Boolean>() { |
|||
|
|||
@Override |
|||
public void onNext(Boolean validationResult) { |
|||
renewUserIdLiveData.setIsAllDataValid(validationResult); |
|||
} |
|||
|
|||
@Override |
|||
public void onError(Throwable e) { |
|||
renewUserIdLiveData.setIsAllDataValid(false); |
|||
} |
|||
|
|||
@Override |
|||
public void onComplete() { |
|||
|
|||
} |
|||
}) |
|||
); |
|||
} |
|||
|
|||
@Override |
|||
public void onViewReady() { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void onViewNotReady() { |
|||
|
|||
} |
|||
|
|||
public class RenewUserIdValidator { |
|||
|
|||
/** |
|||
* Customer Information |
|||
*/ |
|||
RenewIdRequestDataDTO renewIdRequestDataDTO; |
|||
|
|||
|
|||
public RenewUserIdValidator(RenewIdRequestDataDTO renewIdRequestDataDTO) { |
|||
this.renewIdRequestDataDTO = renewIdRequestDataDTO; |
|||
} |
|||
|
|||
public RenewIdRequestDataDTO getRenewIdRequestDataDTO() { |
|||
return renewIdRequestDataDTO; |
|||
} |
|||
|
|||
boolean validateUserId(CharSequence data) { |
|||
|
|||
renewIdRequestDataDTO.setUserId(data != null ? data.toString() : null); |
|||
if (renewIdRequestDataDTO.isUserIdValid()) { |
|||
renewUserIdLiveData.setUserIdLiveData(new FormInputStateDTO<>(true, null, null)); |
|||
return true; |
|||
} else { |
|||
renewUserIdLiveData.setUserIdLiveData(new FormInputStateDTO<>(false, view.getContext().getResources().getString(R.string.invalidUserId), null)); |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
boolean validateUserFrontImg(File data) { |
|||
|
|||
renewIdRequestDataDTO.setIdFront(data); |
|||
if (renewIdRequestDataDTO.isFrontIdImageFileValid()) { |
|||
return true; |
|||
} else { |
|||
view.showToastMessage(view.getContext().getResources().getString(R.string.invalidFrontIdImage_text)); |
|||
return false; |
|||
} |
|||
|
|||
} |
|||
|
|||
boolean validateUserBackImg(File data) { |
|||
|
|||
renewIdRequestDataDTO.setIdFront(data); |
|||
if (renewIdRequestDataDTO.isFrontIdImageFileValid()) { |
|||
return true; |
|||
} else { |
|||
view.showToastMessage(view.getContext().getResources().getString(R.string.invalidBackIdImage_text)); |
|||
return false; |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
} |
@ -1,16 +1,483 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.view; |
|||
|
|||
import androidx.appcompat.app.AppCompatActivity; |
|||
|
|||
import android.Manifest; |
|||
import android.content.ClipData; |
|||
import android.content.Intent; |
|||
import android.content.pm.PackageManager; |
|||
import android.graphics.Bitmap; |
|||
import android.net.Uri; |
|||
import android.os.Build; |
|||
import android.os.Bundle; |
|||
import android.provider.MediaStore; |
|||
import android.provider.Settings; |
|||
import android.view.View; |
|||
import android.widget.Button; |
|||
import android.widget.ImageView; |
|||
import android.widget.LinearLayout; |
|||
import android.widget.ProgressBar; |
|||
|
|||
import androidx.core.app.ActivityCompat; |
|||
import androidx.core.content.FileProvider; |
|||
import androidx.lifecycle.ViewModelProvider; |
|||
|
|||
import com.google.android.material.snackbar.Snackbar; |
|||
import com.google.firebase.iid.FirebaseInstanceId; |
|||
import com.jakewharton.rxbinding3.widget.RxTextView; |
|||
import com.swifttech.remit.jmecustomer.BuildConfig; |
|||
import com.swifttech.remit.jmecustomer.R; |
|||
import com.swifttech.remit.jmecustomer.base.BaseActivity; |
|||
import com.swifttech.remit.jmecustomer.common.customwidgets.GmeTextView; |
|||
import com.swifttech.remit.jmecustomer.common.model.FormInputStateDTO; |
|||
import com.swifttech.remit.jmecustomer.common.view.MTextInputEditText; |
|||
import com.swifttech.remit.jmecustomer.common.view.MTextInputLayout; |
|||
import com.swifttech.remit.jmecustomer.common.view.MTextView; |
|||
import com.swifttech.remit.jmecustomer.features.home.view.HomeActivityV2; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.RenewIdViewModelFactory; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.presenter.RenewIdV2PresenterInterface; |
|||
import com.swifttech.remit.jmecustomer.features.renewId.presenter.RenewIdV2ViewModel; |
|||
import com.swifttech.remit.jmecustomer.utils.other.Utility; |
|||
import com.theartofdev.edmodo.cropper.CropImage; |
|||
|
|||
import java.io.File; |
|||
import java.text.SimpleDateFormat; |
|||
import java.util.Date; |
|||
|
|||
import butterknife.BindView; |
|||
import butterknife.ButterKnife; |
|||
import butterknife.OnClick; |
|||
import id.zelory.compressor.Compressor; |
|||
import io.reactivex.subjects.PublishSubject; |
|||
|
|||
public class RenewIdActivity extends BaseActivity implements RenewIdV2PresenterInterface.RenewIdContractInterface, View.OnClickListener { |
|||
|
|||
|
|||
public static final int REQUEST_PERMISSION_ID_FRONT = 2004; |
|||
public static final int REQUEST_PERMISSION_ID_BACK = 2005; |
|||
|
|||
public static final int CAMERA_REQUEST_ID_FRONT = 1000; |
|||
public static final int CAMERA_REQUEST_ID_BACK = 2000; |
|||
|
|||
public static final int GALLERY_REQUEST_ID_FRONT = 6000; |
|||
public static final int GALLERY_REQUEST_ID_BACK = 7000; |
|||
|
|||
private static final int COMPRESS_QUALITY = 70; |
|||
|
|||
@BindView(R.id.toolbar_title) |
|||
GmeTextView toolBarTitle; |
|||
|
|||
@BindView(R.id.iv_back) |
|||
ImageView imageBack; |
|||
|
|||
@BindView(R.id.iv_cancel) |
|||
View imageCancel; |
|||
|
|||
@BindView(R.id.ed_user_id) |
|||
MTextInputEditText edUserId; |
|||
|
|||
@BindView(R.id.frontIDImageview) |
|||
ImageView frontIDImageview; |
|||
|
|||
@BindView(R.id.backIDImageview) |
|||
ImageView backIDImageview; |
|||
|
|||
@BindView(R.id.frontIdSampleTextView) |
|||
GmeTextView frontIdSampleTextView; |
|||
|
|||
@BindView(R.id.backIdSampleTextView) |
|||
GmeTextView backIdSampleTextView; |
|||
|
|||
@BindView(R.id.userIdWrapper) |
|||
MTextInputLayout userIdWrapper; |
|||
|
|||
@BindView(R.id.frontIdProgressView) |
|||
ProgressBar frontIdProgressView; |
|||
|
|||
|
|||
@BindView(R.id.backIdProgressView) |
|||
ProgressBar backIdProgressView; |
|||
|
|||
|
|||
@BindView(R.id.btnRenewId) |
|||
Button btnRenewId; |
|||
|
|||
@BindView(R.id.idTypeFrontLabelTxtView) |
|||
MTextView idTypeFrontLabelTxtView; |
|||
|
|||
@BindView(R.id.idTypeBackLabelTxtView) |
|||
MTextView idTypeBackLabelTxtView; |
|||
|
|||
@BindView(R.id.rootView) |
|||
LinearLayout rootView; |
|||
|
|||
private RenewUserIdLiveData.RenewUserIdBinding renewUserIdBinding; |
|||
|
|||
private RenewIdV2ViewModel viewModel; |
|||
private PublishSubject<Boolean> frontIdLoadedSubject; |
|||
private PublishSubject<Boolean> backIdLoadedSubject; |
|||
|
|||
private Uri photoURI = null; |
|||
private File photoFile; |
|||
private int currentRequest; |
|||
|
|||
public class RenewIdActivity extends AppCompatActivity { |
|||
|
|||
@Override |
|||
protected void onCreate(Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
setContentView(R.layout.activity_renew_id_layout); |
|||
ButterKnife.bind(this); |
|||
initialize(); |
|||
|
|||
} |
|||
|
|||
private void initialize() { |
|||
toolBarTitle.setText(getString(R.string.renewId_text)); |
|||
RenewIdViewModelFactory renewIdViewModelFactory = new RenewIdViewModelFactory(this); |
|||
viewModel = new ViewModelProvider(this, renewIdViewModelFactory).get(RenewIdV2ViewModel.class); |
|||
|
|||
subscribeToIdLiveData(getRenewUserIdBinding()); |
|||
} |
|||
|
|||
private RenewUserIdLiveData.RenewUserIdBinding getRenewUserIdBinding() { |
|||
frontIdLoadedSubject = PublishSubject.create(); |
|||
backIdLoadedSubject = PublishSubject.create(); |
|||
return new RenewUserIdLiveData.RenewUserIdBinding( |
|||
RxTextView.textChanges(edUserId).skipInitialValue(), |
|||
frontIdLoadedSubject, |
|||
backIdLoadedSubject |
|||
); |
|||
} |
|||
|
|||
private void subscribeToIdLiveData(RenewUserIdLiveData.RenewUserIdBinding viewBindings) { |
|||
RenewUserIdLiveData liveData = viewModel.bindRenewUserIdForm(viewBindings); |
|||
|
|||
liveData.getUserIdLiveData().observe(this, this::onUserIdSelected); |
|||
|
|||
liveData.getRenewIdFrontImgLiveData().observe(this, this::onFrontImageSelected); |
|||
liveData.getRenewIdBackImgLiveData().observe(this, this::onBackImageSelected); |
|||
|
|||
liveData.getRenewIdFrontImgIsLoadingLiveData().observe(this, this::onFrontIdImageIsLoading); |
|||
liveData.getRenewIdBackImgIsLoadingLiveData().observe(this, this::onBackIdImageIsLoading); |
|||
|
|||
liveData.getRenewIdFrontImgLabelLiveData().observe(this, this::onFrontImageLabelChange); |
|||
liveData.getRenewIdBackImgLabelLiveData().observe(this, this::onBackIdImageLabelChange); |
|||
|
|||
liveData.getIsAllDataValid().observe(this, result -> btnRenewId.setEnabled(result)); |
|||
} |
|||
|
|||
private void onUserIdSelected(FormInputStateDTO<String> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
edUserId.setText(data.getData()); |
|||
} else |
|||
userIdWrapper.setError(null); |
|||
} else |
|||
userIdWrapper.setError(data.getErrorMessage()); |
|||
|
|||
} |
|||
|
|||
private void onFrontImageSelected(FormInputStateDTO<Bitmap> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
Utility.showImageFromBitmap(this, frontIDImageview, data.getData()); |
|||
frontIdLoadedSubject.onNext(true); |
|||
} else |
|||
frontIDImageview.setImageResource(R.drawable.ic_another_id_picture); |
|||
} else |
|||
showToastMessage(data.getErrorMessage()); |
|||
} |
|||
|
|||
private void onBackImageSelected(FormInputStateDTO<Bitmap> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
Utility.showImageFromBitmap(this, backIDImageview, data.getData()); |
|||
backIdLoadedSubject.onNext(true); |
|||
} else |
|||
backIDImageview.setImageResource(R.drawable.ic_another_id_picture); |
|||
} else |
|||
showToastMessage(data.getErrorMessage()); |
|||
} |
|||
|
|||
private void onFrontIdImageIsLoading(FormInputStateDTO<Boolean> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
if (data.getData()) { |
|||
frontIdProgressView.setVisibility(View.VISIBLE); |
|||
frontIDImageview.setVisibility(View.INVISIBLE); |
|||
} else { |
|||
frontIdProgressView.setVisibility(View.INVISIBLE); |
|||
frontIDImageview.setVisibility(View.VISIBLE); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
private void onBackIdImageIsLoading(FormInputStateDTO<Boolean> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
if (data.getData()) { |
|||
backIdProgressView.setVisibility(View.VISIBLE); |
|||
backIDImageview.setVisibility(View.INVISIBLE); |
|||
} else { |
|||
backIdProgressView.setVisibility(View.INVISIBLE); |
|||
backIDImageview.setVisibility(View.VISIBLE); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
@OnClick(R.id.frontIdSampleTextView) |
|||
public void onFrontIdSamplePhotoClicked() { |
|||
Utility.showImageDialog(this, getResources().getString(R.string.frontIdSample_text), R.drawable.sample_id_front); |
|||
} |
|||
|
|||
|
|||
@OnClick(R.id.backIdSampleTextView) |
|||
public void onBackIdSamplePhotoClicked() { |
|||
Utility.showImageDialog(this, getResources().getString(R.string.backIdSample_text), R.drawable.sample_id_back); |
|||
|
|||
} |
|||
|
|||
@OnClick(R.id.frontIDImageViewContainer) |
|||
public void promptFrontIDImage() { |
|||
askPermission(CAMERA_REQUEST_ID_FRONT, GALLERY_REQUEST_ID_FRONT, REQUEST_PERMISSION_ID_FRONT); |
|||
} |
|||
|
|||
@OnClick(R.id.backIDImageViewContainer) |
|||
public void promptBackIDImage() { |
|||
askPermission(CAMERA_REQUEST_ID_BACK, GALLERY_REQUEST_ID_BACK, REQUEST_PERMISSION_ID_BACK); |
|||
} |
|||
|
|||
@OnClick(R.id.btnRenewId) |
|||
public void onClick() { |
|||
viewModel.renewUserId(); |
|||
} |
|||
|
|||
private void askPermission(int cameraReqCode, int galleryReqCode, int permissonReqCode) { |
|||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { |
|||
int cameraPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA); |
|||
if (Settings.System.canWrite(this) && cameraPermission == PackageManager.PERMISSION_GRANTED) { |
|||
// cameraorGalleryChooser(cameraReqCode, galleryReqCode); |
|||
takeAPicture(cameraReqCode, 0); |
|||
} else { |
|||
/* requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, |
|||
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, permissonReqCode);*/ |
|||
requestPermissions(new String[]{Manifest.permission.CAMERA}, permissonReqCode); |
|||
} |
|||
} else { |
|||
takeAPicture(cameraReqCode, 0); |
|||
// cameraorGalleryChooser(cameraReqCode, galleryReqCode); |
|||
} |
|||
} |
|||
|
|||
private void takeAPicture(int requestCode, int i) { |
|||
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); |
|||
takePictureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); |
|||
takePictureIntent.putExtra("jmecustomer.intent.extras.CAMERA_FACING", i); |
|||
if (takePictureIntent.resolveActivity(getPackageManager()) != null) { |
|||
photoFile = null; |
|||
try { |
|||
photoFile = createImageFileInCache(); |
|||
} catch (Exception ex) { |
|||
|
|||
} |
|||
if (photoFile != null) { |
|||
photoURI = FileProvider.getUriForFile(this, |
|||
BuildConfig.APPLICATION_ID + ".fileprovider", |
|||
photoFile); |
|||
|
|||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) { |
|||
takePictureIntent.setClipData(ClipData.newRawUri("", photoURI)); |
|||
takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); |
|||
} |
|||
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); |
|||
startActivityForResult(takePictureIntent, requestCode); |
|||
} |
|||
} |
|||
} |
|||
|
|||
private File createImageFileInCache() throws Exception { |
|||
// Create an image file name |
|||
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); |
|||
String imageFileName = "JPEG_" + timeStamp + "_"; |
|||
File storageDir = getCacheDir(); |
|||
File image = File.createTempFile( |
|||
imageFileName, |
|||
".jpg", |
|||
storageDir |
|||
); |
|||
return image; |
|||
} |
|||
|
|||
@Override |
|||
public void onRequestPermissionsResult( |
|||
int requestCode, |
|||
String[] permissions, |
|||
int[] grantResults) { |
|||
switch (requestCode) { |
|||
case REQUEST_PERMISSION_ID_FRONT: |
|||
if (grantResults.length > 0 |
|||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { |
|||
takeAPicture(CAMERA_REQUEST_ID_FRONT, 0); |
|||
// cameraorGalleryChooser(CAMERA_REQUEST_ID_FRONT, GALLERY_REQUEST_ID_FRONT); |
|||
|
|||
} else { |
|||
Snackbar.make(rootView.getRootView(), getString(R.string.permission_denied_text), Snackbar.LENGTH_LONG).show(); |
|||
} |
|||
break; |
|||
case REQUEST_PERMISSION_ID_BACK: |
|||
if (grantResults.length > 0 |
|||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) { |
|||
takeAPicture(CAMERA_REQUEST_ID_BACK, 0); |
|||
// cameraorGalleryChooser(CAMERA_REQUEST_ID_BACK, GALLERY_REQUEST_ID_BACK); |
|||
|
|||
} else { |
|||
Snackbar.make(rootView.getRootView(), getString(R.string.permission_denied_text), Snackbar.LENGTH_LONG).show(); |
|||
} |
|||
break; |
|||
|
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onActivityResult(int requestCode, int resultCode, Intent intent) { |
|||
try { |
|||
if (requestCode == CAMERA_REQUEST_ID_BACK || |
|||
requestCode == CAMERA_REQUEST_ID_FRONT |
|||
|
|||
) { |
|||
|
|||
if (resultCode == RESULT_OK) { |
|||
requestToCropImage(requestCode); |
|||
} |
|||
|
|||
} else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { |
|||
CropImage.ActivityResult result = CropImage.getActivityResult(intent); |
|||
|
|||
if (resultCode == RESULT_OK) { |
|||
Uri resultUri = result.getUri(); |
|||
|
|||
File imageFile = createCompressedImageFileFromUri(resultUri); |
|||
viewModel.checkImageStatus(currentRequest, resultCode, imageFile); |
|||
|
|||
} else { |
|||
showToastMessage(result.getError().getMessage()); |
|||
} |
|||
} else { |
|||
|
|||
if (resultCode == RESULT_OK) { |
|||
photoURI = intent.getData(); |
|||
|
|||
requestToCropImage(requestCode); |
|||
} |
|||
|
|||
} |
|||
} catch (NullPointerException ex) { |
|||
ex.printStackTrace(); |
|||
} |
|||
super.onActivityResult(requestCode, resultCode, intent); |
|||
|
|||
} |
|||
|
|||
private void requestToCropImage(int currentRequest) { |
|||
this.currentRequest = currentRequest; |
|||
CropImage.activity(photoURI) |
|||
.setCropMenuCropButtonTitle(getString(R.string.done_text)) |
|||
.start(this); |
|||
} |
|||
|
|||
private void onFrontImageLabelChange(FormInputStateDTO<String> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
if (data.getData().length() == 0) { |
|||
idTypeFrontLabelTxtView.setText(getString(R.string.front_id_text)); |
|||
frontIDImageview.setImageResource(R.drawable.ic_another_id_picture); |
|||
} else |
|||
idTypeFrontLabelTxtView.setText(data.getData()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
private void onBackIdImageLabelChange(FormInputStateDTO<String> data) { |
|||
if (data.isValid()) { |
|||
if (data.hasData()) { |
|||
if (data.getData().length() == 0) { |
|||
idTypeBackLabelTxtView.setText(getString(R.string.backId_text)); |
|||
backIDImageview.setImageResource(R.drawable.ic_another_id_picture); |
|||
} else |
|||
idTypeBackLabelTxtView.setText(data.getData()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onRenewUserIdSuccess() { |
|||
viewModel.renewIdSuccessPopup(); |
|||
} |
|||
|
|||
@Override |
|||
public void exitReneUserIdView() { |
|||
Intent intent = new Intent (this, HomeActivityV2.class); |
|||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); |
|||
startActivity(intent); |
|||
} |
|||
|
|||
@Override |
|||
protected void onResume() { |
|||
super.onResume(); |
|||
viewModel.onViewReady(); |
|||
} |
|||
|
|||
@Override |
|||
protected void onPause() { |
|||
super.onPause(); |
|||
viewModel.onViewNotReady(); |
|||
} |
|||
|
|||
@Override |
|||
protected void onStart() { |
|||
super.onStart(); |
|||
imageBack.setOnClickListener(this); |
|||
imageCancel.setOnClickListener(this); |
|||
|
|||
} |
|||
|
|||
@Override |
|||
protected void onStop() { |
|||
super.onStop(); |
|||
imageBack.setOnClickListener(null); |
|||
imageCancel.setOnClickListener(null); |
|||
} |
|||
|
|||
@Override |
|||
public void onClick(View view) { |
|||
switch (view.getId()) { |
|||
case R.id.iv_back: |
|||
onBackPressed(); |
|||
break; |
|||
|
|||
case R.id.iv_cancel: |
|||
finish(); |
|||
break; |
|||
|
|||
} |
|||
} |
|||
|
|||
private File createCompressedImageFileFromUri(Uri data) { |
|||
|
|||
File compressedBitmap = null; |
|||
try { |
|||
compressedBitmap = new Compressor(this) |
|||
.setCompressFormat(Bitmap.CompressFormat.JPEG) |
|||
.setQuality(COMPRESS_QUALITY) |
|||
.compressToFile(new File(data.getPath())); |
|||
} catch (Exception e) { |
|||
|
|||
} |
|||
return compressedBitmap; |
|||
} |
|||
} |
@ -0,0 +1,139 @@ |
|||
package com.swifttech.remit.jmecustomer.features.renewId.view; |
|||
|
|||
import android.graphics.Bitmap; |
|||
|
|||
import androidx.lifecycle.LiveData; |
|||
import androidx.lifecycle.MutableLiveData; |
|||
|
|||
import com.swifttech.remit.jmecustomer.common.model.FormInputStateDTO; |
|||
|
|||
import io.reactivex.Observable; |
|||
|
|||
public class RenewUserIdLiveData { |
|||
private MutableLiveData<FormInputStateDTO<String>> userIdLiveData; |
|||
|
|||
private MutableLiveData<FormInputStateDTO<Bitmap>> renewIdFrontImgLiveData; |
|||
private MutableLiveData<FormInputStateDTO<Boolean>> renewIdFrontImgIsLoadingLiveData; |
|||
private MutableLiveData<FormInputStateDTO<String>> renewIdFrontImgLabelLiveData; |
|||
|
|||
private MutableLiveData<FormInputStateDTO<Bitmap>> renewIdBackImgLiveData; |
|||
private MutableLiveData<FormInputStateDTO<Boolean>> renewIdBackImgIsLoadingLiveData; |
|||
private MutableLiveData<FormInputStateDTO<String>> renewIdBackImgLabelLiveData; |
|||
|
|||
private MutableLiveData<Boolean> isAllDataValid; |
|||
|
|||
public RenewUserIdLiveData() { |
|||
userIdLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdFrontImgLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdFrontImgIsLoadingLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdFrontImgLabelLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdBackImgLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdBackImgIsLoadingLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdBackImgLabelLiveData = new MutableLiveData<>(); |
|||
|
|||
renewIdFrontImgLiveData = new MutableLiveData<>(); |
|||
|
|||
isAllDataValid = new MutableLiveData<>(); |
|||
} |
|||
|
|||
public MutableLiveData<Boolean> getIsAllDataValid() { |
|||
return isAllDataValid; |
|||
} |
|||
|
|||
public void setIsAllDataValid(Boolean isAllDataValid) { |
|||
this.isAllDataValid.setValue(isAllDataValid); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<String>> getUserIdLiveData() { |
|||
return userIdLiveData; |
|||
} |
|||
|
|||
public void setUserIdLiveData(FormInputStateDTO<String> userIdLiveData) { |
|||
this.userIdLiveData.postValue(userIdLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<Bitmap>> getRenewIdFrontImgLiveData() { |
|||
return renewIdFrontImgLiveData; |
|||
} |
|||
|
|||
public void setRenewIdFrontImgLiveData(FormInputStateDTO<Bitmap> renewIdFrontImgLiveData) { |
|||
this.renewIdFrontImgLiveData.postValue(renewIdFrontImgLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<Boolean>> getRenewIdFrontImgIsLoadingLiveData() { |
|||
return renewIdFrontImgIsLoadingLiveData; |
|||
} |
|||
|
|||
public void setRenewIdFrontImgIsLoadingLiveData(FormInputStateDTO<Boolean> renewIdFrontImgIsLoadingLiveData) { |
|||
this.renewIdFrontImgIsLoadingLiveData.postValue(renewIdFrontImgIsLoadingLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<String>> getRenewIdFrontImgLabelLiveData() { |
|||
return renewIdFrontImgLabelLiveData; |
|||
} |
|||
|
|||
public void setRenewIdFrontImgLabelLiveData(FormInputStateDTO<String> renewIdFrontImgLabelLiveData) { |
|||
this.renewIdFrontImgLabelLiveData.postValue(renewIdFrontImgLabelLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<Bitmap>> getRenewIdBackImgLiveData() { |
|||
return renewIdBackImgLiveData; |
|||
} |
|||
|
|||
public void setRenewIdBackImgLiveData(FormInputStateDTO<Bitmap> renewIdBackImgLiveData) { |
|||
this.renewIdBackImgLiveData.postValue(renewIdBackImgLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<Boolean>> getRenewIdBackImgIsLoadingLiveData() { |
|||
return renewIdBackImgIsLoadingLiveData; |
|||
} |
|||
|
|||
public void setRenewIdBackImgIsLoadingLiveData(FormInputStateDTO<Boolean> renewIdBackImgIsLoadingLiveData) { |
|||
this.renewIdBackImgIsLoadingLiveData.postValue(renewIdBackImgIsLoadingLiveData); |
|||
} |
|||
|
|||
public LiveData<FormInputStateDTO<String>> getRenewIdBackImgLabelLiveData() { |
|||
return renewIdBackImgLabelLiveData; |
|||
} |
|||
|
|||
public void setRenewIdBackImgLabelLiveData(FormInputStateDTO<String> renewIdBackImgLabelLiveData) { |
|||
this.renewIdBackImgLabelLiveData.postValue(renewIdBackImgLabelLiveData); |
|||
} |
|||
|
|||
public static class RenewUserIdBinding { |
|||
private Observable<CharSequence> userIdResultObservable; |
|||
private Observable<Boolean> idFrontRenewResultObservable; |
|||
private Observable<Boolean> idBackRenewResultObservable; |
|||
|
|||
public RenewUserIdBinding( |
|||
Observable<CharSequence> userIdResultObservable, |
|||
Observable<Boolean> idFrontRenewResultObservable, |
|||
Observable<Boolean> idBackRenewResultObservable) |
|||
{ |
|||
|
|||
this.userIdResultObservable = userIdResultObservable; |
|||
this.idFrontRenewResultObservable = idFrontRenewResultObservable; |
|||
this.idBackRenewResultObservable = idBackRenewResultObservable; |
|||
} |
|||
|
|||
public Observable<CharSequence> getUserIdResultObservable() { |
|||
return userIdResultObservable; |
|||
} |
|||
|
|||
public Observable<Boolean> getIdFrontRenewResultObservable() { |
|||
return idFrontRenewResultObservable; |
|||
} |
|||
|
|||
public Observable<Boolean> getIdBackRenewResultObservable() { |
|||
return idBackRenewResultObservable; |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
@ -1,9 +1,390 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:app="http://schemas.android.com/apk/res-auto" |
|||
xmlns:tools="http://schemas.android.com/tools" |
|||
android:id="@+id/rootView" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
tools:context=".features.renewId.view.RenewIdActivity"> |
|||
android:background="@color/m_layout_bg_color" |
|||
android:orientation="vertical"> |
|||
|
|||
</androidx.constraintlayout.widget.ConstraintLayout> |
|||
<include layout="@layout/layout_sendmoney_toolbar" /> |
|||
|
|||
<androidx.core.widget.NestedScrollView |
|||
android:id="@+id/scrollView" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent"> |
|||
|
|||
|
|||
<LinearLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginStart="@dimen/_10sdp" |
|||
android:layout_marginTop="@dimen/_5sdp" |
|||
android:layout_marginEnd="@dimen/_10sdp" |
|||
android:background="@color/white" |
|||
android:clickable="true" |
|||
android:focusable="true" |
|||
android:focusableInTouchMode="true" |
|||
android:orientation="vertical"> |
|||
|
|||
<LinearLayout |
|||
android:id="@+id/form1" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_marginBottom="@dimen/_3sdp" |
|||
android:orientation="vertical" |
|||
android:padding="@dimen/_8sdp"> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextInputLayout |
|||
android:id="@+id/userIdWrapper" |
|||
style="@style/MTextInputLayoutForm" |
|||
android:hint="@string/userId" |
|||
app:errorEnabled="true" |
|||
app:errorTextAppearance="@style/MTextInpuLayoutErrorStyle"> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextInputEditText |
|||
android:id="@+id/ed_user_id" |
|||
style="@style/MTextInputEditText" |
|||
android:imeOptions="actionDone" |
|||
android:inputType="text" |
|||
|
|||
/> |
|||
</com.swifttech.remit.jmecustomer.common.view.MTextInputLayout> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
style="@style/MFormTitleDescriptionTextView" |
|||
android:layout_marginStart="@dimen/_8sdp" |
|||
android:layout_marginTop="@dimen/_10sdp" |
|||
android:layout_marginEnd="@dimen/_8sdp" |
|||
android:layout_marginBottom="@dimen/_10sdp" |
|||
android:drawablePadding="@dimen/_5sdp" |
|||
android:gravity="bottom" |
|||
android:text="@string/primaryIdDocuments_text" |
|||
android:textColor="@android:color/black" |
|||
app:drawableStartCompat="@drawable/icv_vd_media" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
<androidx.cardview.widget.CardView |
|||
android:id="@+id/frontIDImageViewContainer" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="@dimen/_4sdp" |
|||
app:cardCornerRadius="@dimen/_8sdp" |
|||
app:cardElevation="@dimen/_2sdp"> |
|||
|
|||
<androidx.constraintlayout.widget.ConstraintLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="6dp" |
|||
android:background="@drawable/ic_rounded_white" |
|||
android:orientation="horizontal"> |
|||
|
|||
|
|||
<ImageView |
|||
android:id="@+id/frontIDImageview" |
|||
android:layout_width="@dimen/_80sdp" |
|||
android:layout_height="@dimen/_72sdp" |
|||
android:layout_marginStart="@dimen/_20sdp" |
|||
android:layout_marginEnd="@dimen/_20sdp" |
|||
android:scaleType="centerCrop" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeFrontHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/view9" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toTopOf="parent" |
|||
app:srcCompat="@drawable/icv_upload_image" |
|||
tools:ignore="ContentDescription" /> |
|||
|
|||
|
|||
<ProgressBar |
|||
android:id="@+id/frontIdProgressView" |
|||
android:layout_width="@dimen/_24sdp" |
|||
android:layout_height="@dimen/_24sdp" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="@id/frontIDImageview" |
|||
app:layout_constraintEnd_toEndOf="@+id/frontIDImageview" |
|||
app:layout_constraintStart_toStartOf="@+id/frontIDImageview" |
|||
app:layout_constraintTop_toTopOf="@id/frontIDImageview" /> |
|||
|
|||
<View |
|||
android:id="@+id/view9" |
|||
android:layout_width="@dimen/_1sdp" |
|||
android:layout_height="0dp" |
|||
android:layout_marginTop="@dimen/_6sdp" |
|||
android:layout_marginBottom="@dimen/_6sdp" |
|||
android:background="@color/gray" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeFrontHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/idTypeFrontLabelTxtView" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/frontIDImageview" |
|||
app:layout_constraintTop_toTopOf="parent" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeFrontLabelTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="0dp" |
|||
android:gravity="start" |
|||
android:paddingStart="@dimen/_20sdp" |
|||
android:paddingEnd="@dimen/_20sdp" |
|||
android:text="@string/front_id_text" |
|||
app:layout_constraintBottom_toBottomOf="@+id/frontIDImageview" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/view9" |
|||
app:layout_constraintTop_toTopOf="@+id/frontIDImageview" |
|||
app:layout_constraintVertical_bias="0.019" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.customwidgets.GmeTextView |
|||
android:id="@+id/frontIdSampleTextView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="wrap_content" |
|||
android:layout_marginBottom="@dimen/_5sdp" |
|||
android:padding="@dimen/_5sdp" |
|||
android:text="@string/view_sample_text" |
|||
android:textColor="@color/m_blue_text_link" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeFrontHintTxtView" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/frontIDImageview" /> |
|||
|
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeFrontHintTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_marginStart="@dimen/_10sdp" |
|||
android:layout_marginEnd="@dimen/_10sdp" |
|||
android:gravity="start" |
|||
android:text="@string/pleaseProvideFrontPhoto_text" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="parent" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/frontIDImageview" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
</androidx.constraintlayout.widget.ConstraintLayout> |
|||
</androidx.cardview.widget.CardView> |
|||
|
|||
<androidx.cardview.widget.CardView |
|||
android:id="@+id/backIDImageViewContainer" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="@dimen/_4sdp" |
|||
app:cardCornerRadius="@dimen/_8sdp" |
|||
app:cardElevation="@dimen/_2sdp"> |
|||
|
|||
<androidx.constraintlayout.widget.ConstraintLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="6dp" |
|||
android:orientation="horizontal"> |
|||
|
|||
|
|||
<ImageView |
|||
android:id="@+id/backIDImageview" |
|||
android:layout_width="@dimen/_80sdp" |
|||
android:layout_height="@dimen/_72sdp" |
|||
android:layout_marginStart="@dimen/_20sdp" |
|||
android:layout_marginEnd="@dimen/_20sdp" |
|||
android:scaleType="centerCrop" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeBackHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/view10" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toTopOf="parent" |
|||
app:srcCompat="@drawable/icv_upload_image" |
|||
tools:ignore="ContentDescription" /> |
|||
|
|||
<ProgressBar |
|||
android:id="@+id/backIdProgressView" |
|||
android:layout_width="@dimen/_24sdp" |
|||
android:layout_height="@dimen/_24sdp" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="@id/backIDImageview" |
|||
app:layout_constraintEnd_toEndOf="@+id/backIDImageview" |
|||
app:layout_constraintStart_toStartOf="@+id/backIDImageview" |
|||
app:layout_constraintTop_toTopOf="@id/backIDImageview" /> |
|||
|
|||
|
|||
<View |
|||
android:id="@+id/view10" |
|||
android:layout_width="@dimen/_1sdp" |
|||
android:layout_height="0dp" |
|||
android:layout_marginTop="@dimen/_6sdp" |
|||
android:layout_marginBottom="@dimen/_6sdp" |
|||
android:background="@color/gray" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeBackHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/idTypeBackLabelTxtView" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/backIDImageview" |
|||
app:layout_constraintTop_toTopOf="parent" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeBackLabelTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="0dp" |
|||
android:gravity="start" |
|||
android:paddingStart="@dimen/_20sdp" |
|||
android:paddingEnd="@dimen/_20sdp" |
|||
android:text="@string/backId_text" |
|||
app:layout_constraintBottom_toBottomOf="@+id/backIDImageview" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/view10" |
|||
app:layout_constraintTop_toTopOf="@+id/backIDImageview" |
|||
app:layout_constraintVertical_bias="0.01999999" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.customwidgets.GmeTextView |
|||
android:id="@+id/backIdSampleTextView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="wrap_content" |
|||
android:layout_marginBottom="@dimen/_5sdp" |
|||
android:padding="@dimen/_5sdp" |
|||
android:text="@string/view_sample_text" |
|||
android:textColor="@color/m_blue_text_link" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeBackHintTxtView" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/backIDImageview" /> |
|||
|
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeBackHintTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_marginStart="@dimen/_10sdp" |
|||
android:layout_marginEnd="@dimen/_10sdp" |
|||
android:gravity="start" |
|||
android:text="@string/provideBackIdPhoto_text" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="parent" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/backIDImageview" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
|
|||
</androidx.constraintlayout.widget.ConstraintLayout> |
|||
</androidx.cardview.widget.CardView> |
|||
|
|||
<androidx.cardview.widget.CardView |
|||
android:id="@+id/sideIDImageViewContainer" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="@dimen/_4sdp" |
|||
android:visibility="gone" |
|||
app:cardCornerRadius="@dimen/_8sdp" |
|||
app:cardElevation="@dimen/_2sdp"> |
|||
|
|||
<androidx.constraintlayout.widget.ConstraintLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_margin="6dp" |
|||
android:orientation="horizontal"> |
|||
|
|||
|
|||
<ImageView |
|||
android:id="@+id/sideIDImageview" |
|||
android:layout_width="@dimen/_80sdp" |
|||
android:layout_height="@dimen/_72sdp" |
|||
android:layout_marginStart="@dimen/_20sdp" |
|||
android:layout_marginEnd="@dimen/_20sdp" |
|||
android:scaleType="centerCrop" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeSideHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/view13" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toTopOf="parent" |
|||
app:srcCompat="@drawable/icv_upload_image" |
|||
tools:ignore="ContentDescription" /> |
|||
|
|||
<ProgressBar |
|||
android:id="@+id/sideIdProgressView" |
|||
android:layout_width="@dimen/_24sdp" |
|||
android:layout_height="@dimen/_24sdp" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="@id/sideIDImageview" |
|||
app:layout_constraintEnd_toEndOf="@+id/sideIDImageview" |
|||
app:layout_constraintStart_toStartOf="@+id/sideIDImageview" |
|||
app:layout_constraintTop_toTopOf="@id/sideIDImageview" /> |
|||
|
|||
|
|||
<View |
|||
android:id="@+id/view13" |
|||
android:layout_width="@dimen/_1sdp" |
|||
android:layout_height="0dp" |
|||
android:layout_marginTop="@dimen/_6sdp" |
|||
android:layout_marginBottom="@dimen/_6sdp" |
|||
android:background="@color/gray" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeSideHintTxtView" |
|||
app:layout_constraintEnd_toStartOf="@+id/idTypeSideLabelTxtView" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/sideIDImageview" |
|||
app:layout_constraintTop_toTopOf="parent" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeSideLabelTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="0dp" |
|||
android:gravity="start" |
|||
android:paddingStart="@dimen/_20sdp" |
|||
android:paddingEnd="@dimen/_20sdp" |
|||
android:text="@string/sideId_text" |
|||
app:layout_constraintBottom_toBottomOf="@+id/sideIDImageview" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toEndOf="@+id/view13" |
|||
app:layout_constraintTop_toTopOf="@+id/sideIDImageview" |
|||
app:layout_constraintVertical_bias="0.019999999" |
|||
tools:ignore="HardcodedText" /> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.customwidgets.GmeTextView |
|||
android:id="@+id/sideIdSampleTextView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_width="wrap_content" |
|||
android:layout_marginBottom="@dimen/_5sdp" |
|||
android:padding="@dimen/_5sdp" |
|||
android:text="@string/view_sample_text" |
|||
android:textColor="@color/m_blue_text_link" |
|||
app:layout_constraintBottom_toTopOf="@+id/idTypeSideHintTxtView" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/sideIDImageview" /> |
|||
|
|||
|
|||
<com.swifttech.remit.jmecustomer.common.view.MTextView |
|||
android:id="@+id/idTypeSideHintTxtView" |
|||
style="@style/MLabelTextView" |
|||
android:layout_marginStart="@dimen/_10sdp" |
|||
android:layout_marginEnd="@dimen/_10sdp" |
|||
android:gravity="start" |
|||
android:text="@string/provideSideFacingIdPhoto_text" |
|||
android:visibility="gone" |
|||
app:layout_constraintBottom_toBottomOf="parent" |
|||
app:layout_constraintEnd_toEndOf="parent" |
|||
app:layout_constraintHorizontal_bias="0.5" |
|||
app:layout_constraintStart_toStartOf="parent" |
|||
app:layout_constraintTop_toBottomOf="@+id/sideIDImageview" /> |
|||
|
|||
|
|||
</androidx.constraintlayout.widget.ConstraintLayout> |
|||
</androidx.cardview.widget.CardView> |
|||
|
|||
<com.swifttech.remit.jmecustomer.common.customwidgets.GmeButton |
|||
android:id="@+id/btnRenewId" |
|||
style="@style/MButton" |
|||
android:layout_gravity="center" |
|||
android:layout_marginTop="@dimen/_15sdp" |
|||
android:enabled="false" |
|||
android:text="@string/renewId_text" /> |
|||
|
|||
</LinearLayout> |
|||
</LinearLayout> |
|||
</androidx.core.widget.NestedScrollView> |
|||
|
|||
|
|||
</LinearLayout> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue