From 58be7272218e000b3a3beecd68b19c4b2853778e Mon Sep 17 00:00:00 2001 From: Preyea Regmi Date: Mon, 22 Jul 2019 17:28:43 +0900 Subject: [PATCH] Receiver profile fixes: added two input fields and channel io implemented --- .idea/caches/build_file_checksums.ser | Bin 662 -> 661 bytes .idea/caches/gradle_models.ser | Bin 0 -> 392543 bytes .idea/modules.xml | 5 + app/build.gradle | 6 +- .../gmeremittance_native/GmeApplication.java | 2 + .../view/CustomerSupportFragment.java | 122 ++++++++++- .../customwidgets/CustomAlertDialog.java | 32 ++- .../homeV2/HomeParentViewContractV2.java | 4 + .../homeV2/presenter/HomeV2Presenter.java | 11 + .../presenter/HomeV2PresenterInterface.java | 4 + .../homeV2/view/HomeActivityV2.java | 203 +++++++++++++----- .../gateway/RecipientAddV2Gateway.java | 5 +- .../model/recipientadd/ReceiverIdType.java | 36 ++++ .../recipientadd/RecipientRelatedModel.java | 155 +++++++------ .../recipientlisting/RecipientInfoModel.java | 88 +++++--- .../RecipientAddV2InteractorInterface.java | 4 +- .../recipientadd/RecipientAddV2Presenter.java | 147 +++++++------ .../RecipientAddV2PresenterInterface.java | 11 +- .../recipientadd/RecipientAddV2Activity.java | 94 +++++++- .../presenter/SplashScreenPresenter.java | 4 +- .../splash_screen/view/SplashScreen.java | 2 +- app/src/main/res/drawable-v24/ic_chat.png | Bin 0 -> 1918 bytes .../main/res/drawable/circular_white_bg.xml | 6 + app/src/main/res/layout/activity_home_v2.xml | 19 +- .../main/res/layout/activity_recipient_v2.xml | 122 +++++++++-- .../main/res/layout/dialog_common_error.xml | 22 +- .../res/layout/fragment_customer_support.xml | 77 +++++-- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values/strings.xml | 6 + 29 files changed, 889 insertions(+), 300 deletions(-) create mode 100644 .idea/caches/gradle_models.ser create mode 100644 app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/ReceiverIdType.java create mode 100644 app/src/main/res/drawable-v24/ic_chat.png create mode 100644 app/src/main/res/drawable/circular_white_bg.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 5e0659e6110766e5d11b61cde1076488adf6b998..ce82d8cee548d46a92db8fcf681e64b02d892ede 100644 GIT binary patch delta 76 zcmV-S0JHy=1(gMmmj!GXXV40foXj445>f~7f_psX{`N4&z|3iM046V0b7gXKFK2CK iUz5!NH8=6QJBJ|IK@ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser new file mode 100644 index 0000000000000000000000000000000000000000..94656620999c8ae9905329fe3cfb0f603884dc38 GIT binary patch literal 392543 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%0AkQ zpX19B4<1*=SJ2!XL{Ns(9;O*y#6Io3`^7)peZRrGl%rkX+>L4-TpMtm)v%QzeYGq? zB_gOOTF9r>44BS>qCudkqDWb&8)v%bumbgftt7YOj;z@#yClo4<;3+cHwnB_khp=i zNvB|S@onO>CIZS$7y<%=XA?Jj@oeIAhy~*f6JMd-gdqT8{F?Xz&C(+DXXn+OU%q95 z!K>#Gjw-C}fZfRs#lFnyxJI}*+8f3xOtt`d#FTVFN`uZVWHL}|3z#~qiK&8$x4lh9 zKGf!-<2?-V9~Sy|W$Xp5gP6@Qi_wdaK(4k+-wbc(V*MyaTp+wqmm2&>#Mp69aqtbf zh31pze zd*N`Sd|;$5DrI$m?I;Jz>bP1K29_!6a!8{DIc@4<9TOGff77N#x|c=bqZ3DnjdhD* z1G+2{9i3P;QB#K_vqmQtnTc!`DGHw1W7qNFNPqK#!yr`%{X=wp$7%!B4W;T3Be1>AfCX=)yXj%&llxb_`;|Qw8(-VYC-D;|fHDvI&9BZw zH2tgId+X|MvNbC2=$-BOVwjjyx9dlulj zs@JPpNf(AhMTDm63waVM0ai`kO7~xkR#u3MV@4~?A!<65WEjqYkw&#L#E1ah3%vUi zj4vMa*@Lb&zR1FT*NYp}jq7kHR2h=Sbm(?NrKG6~#inEr6`+|EZ)Q)UnT0<-^$DXH z!Ojrok;)K1TCq1{*sZ*sLyUG#zxZtpqaBuG*R;3?csp{nT!xyh+m1<7L0mk=l z8)~4ohv^@v)<>)iUQqv272%khXY^Xg|A65id@Oq^MjMf0>?os+`MiJT*ud=781(_{ zZ8|i}zB9)6{_?MVe_?!&#p+ozS>3Qs*K29uKKyqmJ&?j^5%asuu-1H_vBR{qRrh;gIUP?MebPr%GgIp}`F`1Ko7 zzT<9v!)SK>+O_4XESA^8?Yzd?wL=aCdH7LF2S?zJwK;c#4OJeim-LAZ>O@Uc1{-yG za1@Hc4#KUD#^9*FVeNQ^B@0OB2VhP-QeySI#pwTq=l5A?^uLdTFUlYw@`POWW{x4_ z%d@X}=$FQqcf~O&>5zcBrf5U#hmoP|Kz1NyF~z&^J2pkz1&a1S`%nfe+M}w7#2^8p~JiDVLY1b`dKZ%-7#y}0L{`PM^4u8 zASBfvlo0&jhze=d@N(PWXjR_8inW__h1q=>x8$(|6rhJIR<)7BsMy+vNTdrmEp*ASiGbXtXm*N_#R!K8jfrae^V5;p%=?5 zjJw~9YV6uT*UiSqwGD^WtD}dGRbX9RB{nu3EsnB<52j=We7jaFmt+xDqcu}=%&A*k zt!Sl@!%AvdVdFM!I5HDI@@Q$N(TT(PP_0lK)iDTHKCD`Xa+?e(Kmqj2px80YG{TIe zhhek^xvarxq22%uIcOLFFx=o$9)!_qe(AvB2y}zL*IBYJRavDr^p;nGrT=Jnn{ktc zODgXlIPI7*y*8%vKO{yc0O<*0d5k?1fwzMf$H9hkMdQ_NLxmr)w}RJf=@J+lfgDp~ z>x&-AO!d`l-#QREzx(mK4nAu;#Mk}Q#_7NhGY>ul*&-5wtc26WMnfHy%IZqsa(pHN zY`kcSY|PaEsH&8Jl^cU{8QW?MqP#HX#U7v6BeP)&YG4*&55~(fEYHKoiGO&&VwMQP zIAn@2n$l!&2nd?qM8RL`?bO!l?zW~nKyG9urR;9*2r4wDO$?@Tw|X$O)w*pCH?avi z$}+N{n8zIcR<;S{gS>KzeL6YEF4$<2b5Xb9zz(MOT(Rx14V}@n`j_DcaU`>m?1W@K z5>(gI1tddA&}BFsJ!I2YAX$S%Lb4u79m#1(-jC#bB$p!jIFf6T+=%4MNbW##50VFw zJc{H=B+nyx5y`7aUI()6G$e5(vytqCWImGpkO)YIkQ|C+Ig%Af)*z9PtVdEuavGBN zBRL<*rAR)GSZ|c`K~DdL+6QZKk!g)r+3|M^}wKikqIuMn*T`%G|va|J?Pc z#ksKV&p33^%B5?MUopIPR+d#|JSWw<*z0gP2JgVC47b}NRZjUFW&1T?3?hP0XA@CPu5j{^PHM5jk~ zby$DKE~5E4*s#{yV9U@jYLph^)X*t=9`vvK{ssSG=NS3beR~@^uGwXC#AA+kCch&< z>A%PJ9@ebb{^tK~tXtbq-#^|7Sk6N^hIaKU>XRH726UB9AU+JX4%WlR@$4_&zXQ|GfSD4WEC;iGOm8|_{KgiUPMleMc){=_%%Z%b=T z?C`+S*td2sGyZZgcHMpCV>c|?pZ(M{^rHB|u}JV1T=xnjE0L^1f@{9f-HG@UF8t=M z7=LBr-TiQE!Q=BVf@B&b;OJ3QY0TJQ*u@?`?LXtZ*p_LmclY*W2fjU7f?qecxVXW= z=W&m4^b}{%X>jtbiYe&W;2;BNY`XCso;xdl=_{<4Cf?Z$<(8kt@BA_w&)+bLf#u!5 zoqgAX7fZ87^ow=&$RC>z{%OJG^FCue$o!?d;G z{?2-kImEiR{NaquTk(;ei1lDk*WVTlU&AME>K?m6TRhOviv z=(@LjYrk7R#~z&7d~jCswNKzNrSTwhEO&1??SgocJ-9>j!5u%a@F!=n2l;$V?g4SS zR)U;g&B@pjx#v|jl0CaMJAdn0J70-nVW4E5-|j7Io*G}rQ0~)waKWYTE!=87$Xv7C zTk;=$_s#6V!RCX>!UeD4RXL+Y=11+`5}p2}#2(ByA1r+HXHm3YjR%=et$WLB`g z55BGW;M)fme{~P*LFQHN-g5eTZ(741T->%j{9iLp*o$d1I{d+PENN0h+QXVFl6J?4IQtFUm%^4c(06ZmQ2 z=o6!%SdT9nZ@0PrARM>v;P)j45jQ(M6QHJ83%|Wt{S89}3Wkz7$geAiG2lnDNgp+QE_zxvV4<;Zk)P3ee|$ z+iAX|13Trk+Yf59i^0HQ1V^gnnQD4fVYYEVDYrN}0E!I^K4S6*C0o>sxPZ3>ZZfQhQ1O4Z_DKs_H+@b*^CfeND^C+ zpdML9gd6oxQxEErrIlP7@*8VHTEbgAO|1(v+hg3d0F_%?jj)z)ESifF(f3GW;kF)oNe9E zK%?BPCG{R4|C9uMBpkj{PRT+LJ=A&249K(0!s8kw?tEF-cZ2>3N=OZQo&eqeeJW4+{LGgqIszR0z{i~Q;G`3 zSGp;Bjts&}z?T-5PcQ+$vnk+r{p}-@e6D5))&^R9vc|+;$QYCkv2d z3+_fMNeFL+GJcu>TZDWrlT})m>U((i6z2hzgGC%P%;b>`VNp|$^uD1;VZ(F`~j5yy`*=Zbje$o^gh;<-XDEs@Q)|+DWdq3 zM6WBbZCy`wn%z%wFcg1MXfVE#{VYoMk#5PR_)tTm43u-qY84ulCG|V(ar|X`7AfAY z&`1Jw0448RXiUBufnxH7N8_a*PQG=!jZ8nh)YK2Zy){{v_+(O6cZF@m?bmuWMM@U) zkaru>55g8anNPxj3*?E-z%@<{s^+w=?#78P>>enqJE41D9q>og0c+ekfU>$1a4j-4 zt^aWVWpyXuu;e`d_o(G&r>yRTz5^tivbqyc_{uV6b*J?2CB5mN?(+o7ZM4gh-srUb zAB&vLrI#`|a6JMe#YKIgGrx0MmQ+C#GZLiU%4Ul~K}=^QNs(1KUnqd%zD0(kQ4WGs zb%+YWPm-e;TRQ_IUR&JrluVoCAqtddO3oxQ8cV8=_{cph?g$-g6wO9P5FpzWX8;+C zuY^<9AUX;!Ie*KF8*XEAzI{{9ci3g{s^4=Fqd%eWE;;9z| zNbv+YB;{O65<$=lqAI0|f}B#5DwHbEx61l190m4C_>IUEu%9Z-DqpLwPO7B+Rjz$xX6 zhxr83HWi&H?&sLeM+FXu5=YRHVsE}W0c-WmILECME+8D@b_8jlZlIi8bOf2DBc8l? z`z?G%DPaN~K@*@WXnvy(u)eR(pd?Q3$Vhn}xG(H_^ggCLnvt&2C3pVnI(Cy7jXsL< z=h+*^;m$V{%~0y%Ms|bRmU%2)%;lk?oFo@v$Dpa0s5+@Yu~5k41OY(V)@^^3#oHnt zii@oicziX-Flvs=+?s;#wqwLvijI|0jA zYfwC=9RcKJaQtEClMREzj8O;XkFNRDmQl zssgWkwro5oi)ToTfm(ucx*QUdr64Z;+I5!Gf#QS-i6cNaP^{^YhdBHG@$1xJ6Q`TCQ>rW{A5@}Kq@I{g-lYxRR6iGlFt_)Q@WOe zf^sP#B^F#h2;-_c(U_s5@YMr&J7~sN+OWbd``JrvuuHoFKxSx0JtvlY&=j}Ygw%Nkiq3n&$kiY0= zj_t#50&Kpj0k4V9xYw;3E_)Mz4pbO#hMb+28i`7evkSDi%lOcnVDti%3*|mTrzOT$ zSuQQq}{@mEk=nI+)mN3okQiTConz146MS@;<2DCsGWlws4^%Usm{T(w8zhr z$3M@t2gM!SIYoYy9F*)k}>m=@Z0O8~ZL3YLQhw@RTbxOPGKss}6)IRjJQ zwOAaXtnYTw1?mJ!FeZ7zEJbkZ{#U%l6+tLxWV_=LApM~>+3jNS6?saeBY93dy%Cr7 zT+GaZ=--=i{*Ut?D80-lE!0*PLa!lDx^WI-l);kV*aIrn=d#(Plu~nIMv&5in9E_Z zDmAT$Ek;4Fb@MuuFcEP0NqcV(2>Q%^x3q`yl@I_13VbLHO#o!c{C8fteidh*P#T&5 zB0%gZ5ongc5#abrekff?0phjDU;nZ1u%L+E*_QD4&Y4*K`Y4~hP>^yhC}=szWCCgD!^0|yhzj--O|RRg=A8hDFa4TRdf zP*Dczf=~x=R8*EixPN^0etZ@~S-Dgs0a}6Ld$F_v6_c-O2<0Lrqw&%Y-~Zm1{(_pJ zci*Od*zdwGZ>aLgq*zf-Z-*o{%s2@{I}{+ZkphX16u6p|%O$f4WKt0FIYE@AR61L1 zJ*wy(;7};bZ%8Pw1>Vhq#_6#FhDCQC0o@bYd}&VP!17ZOK+R-njX zNJPFmfnr95#p0zAKGU-sJF4hCxTz5idF1XLF5zNGv1^<_b*TGfo?e;;LpqZx;%)0f z3TljI<#ei`D3DnZLaMUaLK+H=I{b*eOE?yahbJr+U!8CS>IBTS-r^*n1R#V38K@K} z`_izWEUl2-@polDg_M;!ERX=T5MEKW&*8p$fpXO$?D%;45zgN3S1hWb_xPq_IALdf ztz{~Nvfk~-mv9-)tW2E3qQr)d5Q>FNTFF8pX(=b<(=t@qmf?cmR@Ky29bsjR zp=7+YOuz83eANY(IhwiLtu8LOsi_KPDsL=AMIoD)hAedY$jGz>A3mPKFB~N65jl1AC#pz zezE*sRzL;Mm%^JL?E~5B=12RGe04;4^Me4!YhQBCwyOTB~cV1yg@FCnSubyK~_~+lw5Z^de7ycC@HO- z)>{ZrzN+FvR25kCxJ6Y^!hJi2Hc)4TH_JnerKLRf-u2H`_K@%qN+A#hXc5Zd-m$s# zRVU&1!XZY?)8P2Q`Fr2S433XA^~%Q|{?wsXgmh;dGozqZ>}MphAge`iex zQA#84zPFXB($Erd)nb%r(C12qXC`YD;wif^A`)LIrxd23V(^meKaM`hE@$+z z%ro6sowN7;xd)X`;?qTuY`HEr)|t1pgn{BfmfaLj3h4|~@GE3RNKdDUija{sL6W45 z0MXN$`?%vF4uK-sL`|gL~L6{vWZwM$<{{x`2{{t6v-y`zZE2#h@_*E zO~v3P*(+CFb0D+upJ}ey&u-j#+L3&^NR@%=)mjY;LZFiX3qs_JSy_@LQBg%f(sBhQ zujXV0&MJg_L4d%9*5&$_ym!j+{F1hN_m$^gqdZ$xdz%#{DS;pD!wMATb%aH_eHfM$ z?|!dG@FA?1Yby~Os0%U-#Ki7l(WW-Q2mesbj-R^EO} z?VnmnhFF3s7Jo<;AoClmx>k^tWG)3K0C@p!Os6C`0VpIz6>6?&a3tW8+<$Nep@;|x zfS>TjA}GAKxEEte5G)Bx)EgBD$bM=1x1pyR0i%L zB&BRVnahK_O)7$UorK7NmbExGm&2e0goS|NE7v=qT;JoCYs%Ss2z-IkOlK=#9~SLl3o6~lCuhBOHJ%QK*A}`G9nUR>831~R19A0 z`QP`8eThjn+gKax`9aU0vE$G9bW!#VaObH8bKijE%mRqDv8~Rj1tpz?v;t6Gu?WQ$ zi>XW&QVl>scGy@8noF=3aRiie9vT8)xn7EL{d2cmQ%)3V&;rGpQZ9=I#ggjN`yTu> zpCpPb(Yg;1YRX1|2EO6d`F%P0CtED5_YVDOE`3vZ4Ssdpg~^QlH5Cr>p>!{(Z&y9VpH(yTzGe zLQsGO3iEn`uZ#l366Nj-UfF|B4`oTBbRHnc6e*&>@D*dqmWTwvONdvW{aTi-%cZ6e zuYdmV8z1GfMDdx`H;HBeRoq`2(fDb&;w$EJNw~ZxX0nB1T1%=qB`Xv~8C+(WLaP*8 zmjo#L5)uGkF~*^o`A@ePQ}&T0WPx%_@tKj3Sc3fF$g0n97NIPKq}~H0nW9igIDAE! z;xnTm@RDWq=Hm5Cmd|L)@|ne#_p=s6%7R=|>oP{7*@~V>*IA)d9ZTaqaYG6h(mAX64(3J^<<`{c#n;L}5q zA4=x|VoX_(DKLDcn6e;~0C)-UDJKmXLVQ_Mh%di${zZL!mMG|Cv92(Wx3l1BF;mPG z(n6*HJ}=lVr;Ct}Pe`gt5$)`x(prEZb_K^kS^20Ke1-XH6lP4h(GrtRa>)}1C{Um& z<`Z?KETKNJI@8L5Krx@F00IP?qW-B+e1)50tdK!?3HaS_Ox(#<>CZI<{PWkIbj%A} zxF`Z%uU2(Qg)1oKk^~_p$$>mOsMbSjfWllT13F22Z!DDq6NRvsUaD zj)5ZJR1CfXej5t-{+$tUD!8p8;8ZY{falNu?p1uMC<0CeuoVQH3Z*zkx_M_Xt>A*8>&23FX0$H3r$X72BH@0DQHB(;>Q5y7pT7Zy9{+dzfwi zT65|DPtWs99xn%sP$p6@#|_?g%ef+>tdy$RqLaWJ!nuXl~wq6AT>zD zVu}7g<(sbO^F(o~5&I92cZx+$MB*#tPNQ$D&W7in;Qbf&euhc*ZcWL4>z^(@ZUvt% zl4Li$Bs&Y&y5ag5M5v2ep(v*$si+n-H7|*25pJQlBzrFofh5^92)>fNFG}`Aha{VZ zZRWkYf5&0;>6v5%cqN^ z{>EyxYF%Hb)kSa#I8WK-q^1ekd`>RFX`F_(Jsh!%1+@Ul9n$%tVBhqEAoU%{fl#tv z@O$wjAih$5FiQEkZYif^F$sk*P}V7D&Y=)l5}*0=@jv1-N3v_euuy>9Q+&jsM#We9 zNo!V^k?~yJH$VRM`LTwveyZN!&d_wj~d`|w+5hWSi=AeQ~;zinGiE)$^WM> zIrDFP+9>iCW>f;ipW>_v1IJhTNv9tnCdX6w|9R?A4-r0O@Q1K$h@-Y5Ubysve5)hXJt_gg*?NjtYM$AYRu0w4Y3Sf(ieortnX^wC>8c zaiOC)gPkb#Qn_K5eF;&cGGHNlI%cZkw3X(pyUP2Yo-9l^Q~t5XE_3jpwJNb%JAn=h97gw zFhvK`paqICMa$BlSdx71Cx2vBLZ)b0TK56MOfg<)Kz!wyqSc5HyhQqikG{*;pWo3G z={ui3>B1YhKvB+9X_pmTs{L?q6%uZpn@=q3arLLK2sF53?!UL zr^MDOFnv}O5G67q91>pjDYg$Cg_oS?{yb`&$Nj1)=Pz6`XY=WN(kM%Qqg;X& zf21Z>RQHk(`J|+LE-&UpsO}^~;0+wdC5r_`Er>Z)m0a8LmpBs2k{=FY#DXRvt{{T6s zEU`o+z5-6s!Bh-hl0Ea<&u))09iMGUc6?6uL%UnW7%0|IV`B+2cBmT6|2p?7pU%Ot zo2J2~8o3~*@?u((6hW2M97Nk@@=EK*KE6GdaMICRI4Hi7zB5Ytu5L*u9leFa7%1@+ z?^Vbtv?Tw^yAQWA;7~R_A#ns~0FvnuZnk_i0cFD)a&$b8-rl)?{CcJl7Bn@&zJuTY zR-B6=Wv?bSCMvR_3Q85N443U3ZhSeJQnhSB%x5%7(_{%sFy@nDUMz}9@aMadP{tQ> zER zY{$@GyiA2tKKs|zOfkH@sTdAku=~xsa$%%w0@xj{l3uD-?3;ihR*6U!3ZjrM$fA%_ zv!E74NNHJ+vT9OsZ33(co|H`h5rVH8I2_f$L2flbnMfkGKloc zluZD!{{UI1=s_Y9UlFHl0;m|gBzyN?iI+3UUe%QB;}37#v=f(XidgXwC6;GnA!f!F z9p`&Wu9!)u@&%{}Q_SSDN!;YikcT=C#h)_8bZc&%_(>cL$&+T@Rv?4%mG*a{w0k7T zIEN4c6MD!3<(?vUp;1{H;Kc6TtT<|t%eEu4Scdd3nAe4+Sb^E=dYE$-#S{rWI=)(g zv^fboLY`ZK-<`VoHl`oeH}%7Y(k{R3;R8oeV0_@*njt3@(uGV$Oec$Q@L$Xp;M~8M zgg+$(HI>b`CeDmo$*jYS7y*W_PQYQAy~b?;gyDGtzCdl@%qujtD7_HVX6b>iElscE ztV8l}n_Ny9lK^WV%tA*%<170luN!?-Jf;5k_k3k3llo@D>-d>3ytdnVK6MmFz_?m( zfU&PCH4!pjmqn?p+6{lmkDC)!aQ#bAlUd5-vyfXOCl^zYf~Sbepe3F!eip|Jm8L{RthM+ClUYctD+yvDmC9*_6sQM? z&`+n*$%0sf`WCH00dXshHf6l%D14OxCeoh0$*l}1>`sRls0Jv`8#)|I0i1Q;uS3=T zqeBP~eahlS2jeUBlnq-57+&K3*@p+VRgHHSMH27k5&;UsWE%oE(_8$!-AT zb7D~uidqq_;y|ihNyz7uLNNoGc;teb$+&F)FL4l*;}eAn!dKYwGT!WS+`>*-NXX~{ zWt|l7M;$9m)TLM780E7?kuLIh1V}o?)+S@|6?BRjMn~Z#=f7_J$T;}Br@70&_xjZz z{VAU`%2ushmBq4Dhnsg$=v^NbE3G$p6bbBos1935gRJA7on%H9AS*{+h1@)_0cf@O zzr)c`PTIqx@s<4Vq2yoYmV8Qj&G0Y-RRD$Q!^5(4fpYZ{%UYy_b%ci!pcE*sn(&}} zwF71S=l~oqHSx(c!z#1>f6`PFKfUo!Hx;;GIJtSW`Tn?St?YV~XKL=-x|gAKJI@5)<3sH^uhlUwu3B6rUewLi4GK zEe7w7Ru#33iC4{<8M2a>(-|R|E2Oh|2_pJZGF;%xip88J2-%G5T<hnV$}dH?l8{&;yyT(huI4jD(XFK31EiR8+(g3RE65aOMnm8w%c(^t zu^oA$+mhu(I@9^?~6fyats)T$7hhXvo8D{(3#7safW&x*NhCJ(9cax&DjOAEPT zHl58%t(kBWRw+Hoj+_j_Po@)Ck8(EN!)>{bL$RpH=mO=MvM`X*ShD^0V=u7OKV?Tw zMi3z1l$C&t#aG5DJ90V-FFF6&)Ayc<5}w$pDd#&Mv)AJ(F6Wdmu5xKyRYYC1E!k=T zDpJC=n=JgVLF^s4+7wArWkD2^8Q74w7~6^6c>fgdB&B~}>D~jS`%$-aQ_gWIzybxE zQgW68#FFV{XFan&pB~CON$EU5oGHga6d1meOtJb&0KA0w-08oV!Gt*36yns?f4ubb ze3mGSwS|tQwrm>T*<=o~-#}p+Ih%!ZGEvTDHdXmVE6QWD&kNo(LK$BT22v^txW6;*EC zUMH-Je3TI)bnh$M$DnM#;+Aa+FB5PDN;M^A9RY_W&-*9mS;>tlD_u>y!*~bZ(#Sn(yO5K{%dPVZy>J!CFu>sVM%Y{g|!Fsx#^7b2KN2GBE5kq zwzBjF_wOaW)n8xG!=(4rru5ba&pNRZW{T8JB`C-Y(P)||LySt^@^Gi+q>$3`siL4l zy%<^1R84>^b#RAO%H}eP+`3)f$Wc%t( BW%+av<2n6qS*Ap!(cuM(G-WxU!?7g0 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 literal 0 HcmV?d00001 diff --git a/.idea/modules.xml b/.idea/modules.xml index cda2e337..fedcadb8 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,9 +3,14 @@ + + + + + diff --git a/app/build.gradle b/app/build.gradle index 88e9a7d9..a836e5fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,8 +75,8 @@ android { manifestPlaceholders.fileProvider = "com.gmeremit.online.gmeremittance_native.fileprovider" // applicationIdSuffix ".stag" signingConfig signingConfigs.debug - buildConfigField 'String', 'BASE_URL', '"http://gmeuat.gmeremit.com:5008/api/"' -// buildConfigField 'String', 'BASE_URL', '"http://gmeuat.gmeremit.com:5022/api/"' +// buildConfigField 'String', 'BASE_URL', '"http://gmeuat.gmeremit.com:5008/api/"' + buildConfigField 'String', 'BASE_URL', '"http://gmeuat.gmeremit.com:5022/api/"' buildConfigField 'String', 'API_VERSION', '"v1"' buildConfigField 'String', 'BASE_URL_SOCIAL', '"http://10.1.1.171:8080/v1/"' debuggable true @@ -155,5 +155,7 @@ dependencies { implementation project(path: ':SpinnerDatePickerLib-release') implementation 'com.intuit.sdp:sdp-android:1.0.6' implementation 'com.intuit.ssp:ssp-android:1.0.6' + implementation 'com.zoyi.channel:plugin-android:6.0.3' + } apply plugin: 'com.google.gms.google-services' diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/GmeApplication.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/GmeApplication.java index af99fc62..a00ad724 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/GmeApplication.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/GmeApplication.java @@ -10,6 +10,7 @@ import android.support.multidex.MultiDex; import android.support.multidex.MultiDexApplication; import com.crashlytics.android.Crashlytics; +import com.zoyi.channel.plugin.android.ChannelIO; import java.io.File; import java.text.DateFormat; @@ -38,6 +39,7 @@ public class GmeApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); + ChannelIO.initialize(this); if (!BuildConfig.DEBUG) { Fabric.with(this, new Crashlytics()); } else { diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/customer_support/view/CustomerSupportFragment.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customer_support/view/CustomerSupportFragment.java index ef19e0ef..94462206 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/customer_support/view/CustomerSupportFragment.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customer_support/view/CustomerSupportFragment.java @@ -7,6 +7,7 @@ import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; +import android.support.v4.app.FragmentManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -17,11 +18,22 @@ import android.widget.Toast; import com.gmeremit.online.gmeremittance_native.GmeApplication; import com.gmeremit.online.gmeremittance_native.R; +import com.gmeremit.online.gmeremittance_native.base.PrefKeys; import com.gmeremit.online.gmeremittance_native.customer_support.CustomerSupportContract; import com.gmeremit.online.gmeremittance_native.customer_support.model.CustomerSupportContact; import com.gmeremit.online.gmeremittance_native.customer_support.presenter.CustomerSupportPresenter; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomAlertDialog; +import com.gmeremit.online.gmeremittance_native.customwidgets.CustomProgressDialog; +import com.gmeremit.online.gmeremittance_native.homeV2.HomeParentViewContractV2; +import com.gmeremit.online.gmeremittance_native.homeV2.view.HomeActivityV2; import com.gmeremit.online.gmeremittance_native.splash_screen.model.LanguageModel; import com.gmeremit.online.gmeremittance_native.supportV2.view.SupportActivityV2; +import com.zoyi.channel.plugin.android.ChannelIO; +import com.zoyi.channel.plugin.android.ChannelPluginCompletionStatus; +import com.zoyi.channel.plugin.android.ChannelPluginSettings; +import com.zoyi.channel.plugin.android.Guest; +import com.zoyi.channel.plugin.android.OnBootListener; +import com.zoyi.channel.plugin.android.Profile; import java.util.ArrayList; import java.util.List; @@ -31,12 +43,13 @@ import butterknife.ButterKnife; import butterknife.OnClick; import static com.gmeremit.online.gmeremittance_native.base.PrefKeys.USER_COOUNTRY_CODE; +import static com.zoyi.channel.plugin.android.ChannelPluginCompletionStatus.REQUIRE_PAYMENT; /** * Created by FMI-LT-17 on 2/6/2018. */ -public class CustomerSupportFragment extends DialogFragment implements CustomerSupportContract.IView { +public class CustomerSupportFragment extends DialogFragment implements CustomerSupportContract.IView, OnBootListener { @BindView(R.id.viewLiveChat) View viewLiveChat; @@ -44,8 +57,8 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS @BindView(R.id.viewCall) View viewCall; - @BindView(R.id.viewEmail) - View viewEmail; + @BindView(R.id.chatView) + View chatView; @BindView(R.id.btnCancel) TextView btnCancel; @@ -53,10 +66,23 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS @BindView(R.id.callTxtView) TextView callTxtView; + @BindView(R.id.notificationCounterTxtView) + TextView notificationCounterTxtView; + private CustomerSupportPresenter presenter; - public static CustomerSupportFragment newInstance() { - return new CustomerSupportFragment(); + private CustomProgressDialog dialog; + private boolean isProgressBarShowing; + private CustomAlertDialog customAlertDialog; + + private static final String CUSTOMER_SUPPORT_FRAG_ARG_BUNDLE_KEY="customerSupporBundleKeyArg"; + + public static CustomerSupportFragment newInstance(String badgeCount) { + Bundle bundle=new Bundle(); + bundle.putString(CUSTOMER_SUPPORT_FRAG_ARG_BUNDLE_KEY,badgeCount); + CustomerSupportFragment customerSupportFragment=new CustomerSupportFragment(); + customerSupportFragment.setArguments(bundle); + return customerSupportFragment; } @Override @@ -64,6 +90,8 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar); + + } @Nullable @@ -79,6 +107,38 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS private void performDefaultAction() { callTxtView.setText(getCustomerSupportContact()); + String badgeCount=getArguments().getString(CUSTOMER_SUPPORT_FRAG_ARG_BUNDLE_KEY,""); + if(badgeCount!=null&&badgeCount.length()>0) + { + notificationCounterTxtView.setText(badgeCount); + notificationCounterTxtView.setVisibility(View.VISIBLE); + } + + } + + public void showProgressBar(boolean action, String message) { + try { + if (action) { + if (dialog != null && isProgressBarShowing) { + dialog.updateMessage(message); + return; + } + dialog = new CustomProgressDialog(); + dialog.setMessage(message); + FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); + if (fragmentManager != null) + dialog.show(fragmentManager, "CustomProgressBar"); + isProgressBarShowing = true; + } else { + if (dialog != null) { + dialog.dismiss(); + isProgressBarShowing = false; + dialog = null; + } + } + } catch (Exception e) { + } + } @@ -128,7 +188,7 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS } - @OnClick({R.id.viewLiveChat, R.id.viewCall, R.id.viewEmail, R.id.btnCancel}) + @OnClick({R.id.viewLiveChat, R.id.viewCall, R.id.chatView, R.id.btnCancel}) public void onClick(View view) { switch (view.getId()) { case R.id.viewLiveChat: @@ -137,13 +197,52 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS case R.id.viewCall: presenter.onSupportCallClicked(); break; - case R.id.viewEmail: - presenter.onSupportViaEmailClicked(); + case R.id.chatView: + promptToChat(); break; case R.id.btnCancel: presenter.onCancelClicked(); break; } + } + + private void promptToChat() { + + try { + FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); + if (fragmentManager == null) + return; + if (customAlertDialog != null && customAlertDialog.isAdded()) + return; + customAlertDialog = new CustomAlertDialog(); + customAlertDialog.setMessage(getString(R.string.prompt_chat_text)); + customAlertDialog.setAlertType(CustomAlertDialog.AlertType.ALERT); + customAlertDialog.setPositiveBtnString(getString(R.string.yes_text)); + customAlertDialog.setNegativeBtnString(getString(R.string.no_text)); + customAlertDialog.setActionListener(new CustomAlertDialog.CustomDialogActionListener() { + @Override + public void onCutomDialogActionPressed(CustomAlertDialog.AlertType alertType) { + ChannelPluginSettings settings = new ChannelPluginSettings("24dc2dfd-3ed1-4953-b395-a2255ed41dae"); + settings.setUserId(GmeApplication.getStorage().getString(PrefKeys.USER_EMAIL,"")); + + Profile profile = Profile.create() + .setName(GmeApplication.getStorage().getString(PrefKeys.USER_FIRST_NAME,"")) + .setEmail(GmeApplication.getStorage().getString(PrefKeys.USER_EMAIL,"")); + + showProgressBar(true,getString(R.string.processing_request_text)); + ChannelIO.boot(settings, profile,CustomerSupportFragment.this); + } + }); + + + customAlertDialog.show(fragmentManager, "CustomerMes"); + } catch (Exception e) { + + } + + + + } @Override @@ -199,4 +298,11 @@ public class CustomerSupportFragment extends DialogFragment implements CustomerS Intent intent = new Intent(getActivity(), SupportActivityV2.class); startActivity(intent); } + + @Override + public void onCompletion(ChannelPluginCompletionStatus status, @Nullable Guest guest) { + showProgressBar(false,""); + ((HomeParentViewContractV2)getActivity()).getChannelOnBootListener().onCompletion(status,guest); + dismissDialog(); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/CustomAlertDialog.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/CustomAlertDialog.java index 87f71ebc..356b6ac3 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/CustomAlertDialog.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/customwidgets/CustomAlertDialog.java @@ -16,12 +16,14 @@ import com.gmeremit.online.gmeremittance_native.R; public class CustomAlertDialog extends android.support.v4.app.DialogFragment { private ImageView imgStatusImgView; - private TextView dialogTitleTxt, dialogDescriptionTxt, dialogButtonTxt; + private TextView dialogTitleTxt, dialogDescriptionTxt, dialogOkButtonTxt; private AlertType alertType; private String titleString; private String descriptionString; private CustomDialogActionListener actionListener; private Window window; + private String positiveBtnString=null; + private String negativeBtnString=null; @Override @@ -31,7 +33,14 @@ public class CustomAlertDialog extends android.support.v4.app.DialogFragment { ImageView imgStatusImgView = dialogView.findViewById(R.id.img_status); TextView dialogTitleTxt = dialogView.findViewById(R.id.txt_dialog_title); TextView dialogDescriptionTxt = dialogView.findViewById(R.id.txt_dialog_message); - TextView dialogButtonTxt = dialogView.findViewById(R.id.btn_diaog_ok); + TextView dialogOkButtonTxt = dialogView.findViewById(R.id.btn_diaog_ok); + TextView dialogCancelButtonTxt = dialogView.findViewById(R.id.btn_diaog_cancel); + if(positiveBtnString!=null) + dialogOkButtonTxt.setText(positiveBtnString); + if(negativeBtnString!=null) { + dialogCancelButtonTxt.setText(negativeBtnString); + dialogCancelButtonTxt.setVisibility(View.VISIBLE); + } builder.setView(dialogView); setCancelable(false); dialogDescriptionTxt.setText(descriptionString); @@ -66,7 +75,7 @@ public class CustomAlertDialog extends android.support.v4.app.DialogFragment { dialogTitleTxt.setText(getString( R.string.error_text)); break; } - dialogButtonTxt.setOnClickListener(new View.OnClickListener() { + dialogOkButtonTxt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (actionListener != null){ @@ -77,6 +86,13 @@ public class CustomAlertDialog extends android.support.v4.app.DialogFragment { dismiss(); } }); + + dialogCancelButtonTxt.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + } + }); Dialog dialog= builder.create(); try { this.window = dialog.getWindow(); @@ -112,6 +128,16 @@ public class CustomAlertDialog extends android.support.v4.app.DialogFragment { this.alertType = alertType; } + public void setPositiveBtnString(String string) + { + this.positiveBtnString=string; + } + + public void setNegativeBtnString(String string) + { + this.negativeBtnString=string; + } + public void setActionListener(CustomDialogActionListener actionListener) { this.actionListener = actionListener; } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/HomeParentViewContractV2.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/HomeParentViewContractV2.java index 17b625d6..539ec8e7 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/HomeParentViewContractV2.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/homeV2/HomeParentViewContractV2.java @@ -2,6 +2,7 @@ package com.gmeremit.online.gmeremittance_native.homeV2; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.homeV2.presenter.HomeV2PresenterInterface; +import com.zoyi.channel.plugin.android.OnBootListener; public interface HomeParentViewContractV2 { @@ -17,6 +18,9 @@ public interface HomeParentViewContractV2 { HomeV2PresenterInterface getPresenter(); + OnBootListener getChannelOnBootListener(); + + void showResendMoneyView(); } 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 1933adf1..d348e055 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 @@ -42,6 +42,7 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt private final boolean shouldCheckFingerprintPrompt; private boolean shouldNotPromptAppUpdate; private boolean shouldNotPromptAutoDebitAccountRenew; + private String recentNotificationCount=null; public HomeV2Presenter(HomeV2ContractInterface view, boolean checkFingerprintPromptScreen) { this.view = view; @@ -320,6 +321,16 @@ public class HomeV2Presenter extends BasePresenter implements HomeV2PresenterInt gateway.updateKJBankNoticeSkipDay(skipDate); } + @Override + public void persistNotificationCount(String countString) { + this.recentNotificationCount=countString; + } + + @Override + public String getPersistedRecentNotification() { + return this.recentNotificationCount; + } + private long checkIfAutoDebitRenewIsRequired(String regDateString, String expDateString) { long differenceInDays = 0; 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 b5081505..7a7b1f66 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 @@ -39,6 +39,10 @@ public interface HomeV2PresenterInterface extends BasePresenterInterface { void skipKJBankNoticeForToday(); + void persistNotificationCount(String countString); + + String getPersistedRecentNotification(); + interface HomeV2ContractInterface extends BaseContractInterface { 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 b5938b6a..59e47467 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 @@ -1,21 +1,17 @@ package com.gmeremit.online.gmeremittance_native.homeV2.view; -import android.app.AlarmManager; -import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.res.Configuration; -import android.content.res.Resources; import android.graphics.Color; import android.os.Build; +import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AlertDialog; @@ -39,27 +35,29 @@ import com.gmeremit.online.gmeremittance_native.homeV2.presenter.HomeV2Presenter import com.gmeremit.online.gmeremittance_native.homeV2.presenter.HomeV2PresenterInterface; import com.gmeremit.online.gmeremittance_native.int_notification.view.IntNotificationView; import com.gmeremit.online.gmeremittance_native.recipientV2.view.recipientlisting.RecipientListingV2Activity; -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; import com.gmeremit.online.gmeremittance_native.transactionhistoryV2.view.TransactionHistoryActivityV2; -import com.gmeremit.online.gmeremittance_native.transactionpasspromt.view.TransactionBiometricPromptDialog; import com.gmeremit.online.gmeremittance_native.user_profile.view.ProfileActivity; import com.gmeremit.online.gmeremittance_native.utils.Utils; import com.gmeremit.online.gmeremittance_native.walletstatementV2.view.WalletStatementV2Activity; import com.gmeremit.online.gmeremittance_native.withdrawV2.view.WithdrawV2Activity; import com.text.drawable.TextDrawable; - -import java.util.Locale; +import com.zoyi.channel.plugin.android.ChannelIO; +import com.zoyi.channel.plugin.android.ChannelPluginCompletionStatus; +import com.zoyi.channel.plugin.android.ChannelPluginListener; +import com.zoyi.channel.plugin.android.Guest; +import com.zoyi.channel.plugin.android.OnBootListener; +import com.zoyi.channel.plugin.android.model.etc.PushEvent; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import static com.zoyi.channel.plugin.android.ChannelPluginCompletionStatus.SUCCESS; + public class HomeActivityV2 extends BaseActivity implements HomeParentViewContractV2, HomeV2PresenterInterface.HomeV2ContractInterface { @@ -77,7 +75,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra TextView btn_withdraw; @BindView(R.id.view_about_gme) View about_gme; -// @BindView(R.id.view_support) + // @BindView(R.id.view_support) // View support; @BindView(R.id.view_setting) View settings; @@ -86,12 +84,16 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @BindView(R.id.iv_close) ImageView iv_close; + @BindView(R.id.notificationCounterTxtView) + TextView notificationCounterTxtView; + private Fragment currentFragment; private FragmentManager manager; 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"; + 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"; + private ChannelIOEventListener channelIOEventListener; @Override protected void onCreate(Bundle savedInstanceState) { @@ -105,8 +107,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - if(intent!=null&&intent.getBooleanExtra(BUNDLE_ACTION_FETCH_ALL_DATA,false)&¤tFragment instanceof HomeFragmentV2) - { + if (intent != null && intent.getBooleanExtra(BUNDLE_ACTION_FETCH_ALL_DATA, false) && currentFragment instanceof HomeFragmentV2) { ((HomeFragmentV2) currentFragment).startPulltoRefresh(true); presenter.getRequiredData(); } @@ -114,7 +115,9 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra private void initialize() { manager = getSupportFragmentManager(); - presenter = new HomeV2Presenter(this,getIntent().getBooleanExtra(PROMPT_FINGERPRINT_BUNDLE_FLAG,false)); + presenter = new HomeV2Presenter(this, getIntent().getBooleanExtra(PROMPT_FINGERPRINT_BUNDLE_FLAG, false)); + channelIOEventListener = new ChannelIOEventListener(); + ChannelIO.setChannelPluginListener(channelIOEventListener); } private void performDefaultAction(Bundle savedInstanceState) { @@ -180,11 +183,11 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra } } - @OnClick({R.id.iv_help, R.id.iv_nav, R.id.btn_withdraw, R.id.view_about_gme, R.id.view_setting, R.id.view_logout, R.id.iv_close, R.id.iv_notification,R.id.manageAccountsViewGroup,R.id.view_transaction_report}) + @OnClick({R.id.iv_help, R.id.iv_nav, R.id.btn_withdraw, R.id.view_about_gme, R.id.view_setting, R.id.view_logout, R.id.iv_close, R.id.iv_notification, R.id.manageAccountsViewGroup, R.id.view_transaction_report}) public void onClick(View view) { switch (view.getId()) { case R.id.iv_help: - CustomerSupportFragment newFragment = CustomerSupportFragment.newInstance(); + CustomerSupportFragment newFragment = CustomerSupportFragment.newInstance(presenter.getPersistedRecentNotification()); newFragment.show(getSupportFragmentManager(), "dialog"); showDrawer(false); break; @@ -193,7 +196,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra break; case R.id.btn_withdraw: showDrawer(false); - new Handler().postDelayed(this::openWithdrawScreen,200); + new Handler().postDelayed(this::openWithdrawScreen, 200); break; case R.id.view_about_gme: showDrawer(false); @@ -230,6 +233,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra } } + private void showLogoutConfirmationDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); @@ -328,7 +332,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @Override public void showAutoDebitListingScreen() { - startActivity(new Intent(HomeActivityV2.this,AutoDebitAccountListingV2Activity.class)); + startActivity(new Intent(HomeActivityV2.this, AutoDebitAccountListingV2Activity.class)); } @@ -341,12 +345,20 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra } - @Override public HomeV2PresenterInterface getPresenter() { return presenter; } + @Override + public OnBootListener getChannelOnBootListener() { + if (channelIOEventListener == null) { + channelIOEventListener = new ChannelIOEventListener(); + ChannelIO.setChannelPluginListener(channelIOEventListener); + } + return channelIOEventListener; + } + @Override public void showResendMoneyView() { String unverifiedMessage = presenter.checkIfUserVerified(); @@ -384,7 +396,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra txtBalance.setText(getString(R.string.na_text)); } - if(fullname!=null&&fullname.length()>0) { + if (fullname != null && fullname.length() > 0) { TextDrawable drawable = TextDrawable.builder().buildRound(String.valueOf(fullname.toUpperCase().charAt(0)), getResources().getColor(R.color.blue)); profileTextImageView.setImageDrawable(drawable); } @@ -392,20 +404,20 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @Override - public void showKYCVerifiedIfRequired(boolean shouldShowView, String message, String title, boolean disableKYCViewClick,Runnable callback) { + public void showKYCVerifiedIfRequired(boolean shouldShowView, String message, String title, boolean disableKYCViewClick, Runnable callback) { if (currentFragment instanceof HomeFragmentV2) - ((HomeFragmentV2) currentFragment).showKYCVerifiedIfRequired(shouldShowView, message, title, disableKYCViewClick,callback); + ((HomeFragmentV2) currentFragment).showKYCVerifiedIfRequired(shouldShowView, message, title, disableKYCViewClick, callback); } @Override public void showPennyTestViewIfRequired(boolean showView, String pennyTestTitle, String pennyTestMessage) { if (currentFragment instanceof HomeFragmentV2) - ((HomeFragmentV2) currentFragment).showPennyTestViewIfRequired(showView, pennyTestMessage,pennyTestTitle,null); + ((HomeFragmentV2) currentFragment).showPennyTestViewIfRequired(showView, pennyTestMessage, pennyTestTitle, null); } @Override public void showUpdateScreen(String build, String info, boolean isForceUpdate) { - if(!this.presenter.shouldNotPromptAppUpdate()) { + if (!this.presenter.shouldNotPromptAppUpdate()) { new Handler().postDelayed(() -> { Intent intent = new Intent(HomeActivityV2.this, AppUpdateActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); @@ -426,8 +438,8 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @Override public void showFingerprintAvailablityToUser() { - Intent intent=new Intent(this, FingerprintEnablePromptActivity.class); - startActivity(intent); + Intent intent = new Intent(this, FingerprintEnablePromptActivity.class); + startActivity(intent); } @@ -441,28 +453,27 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra @Override public void showPrivilegedOperationView(Boolean action) { - View withdrawView= nav_drawer.findViewById(R.id.btn_withdraw); + View withdrawView = nav_drawer.findViewById(R.id.btn_withdraw); - View manageAccountDivider=nav_drawer.findViewById(R.id.manageAccountsDivider); - View manageAccountViewGroup=nav_drawer.findViewById(R.id.manageAccountsViewGroup); + View manageAccountDivider = nav_drawer.findViewById(R.id.manageAccountsDivider); + View manageAccountViewGroup = nav_drawer.findViewById(R.id.manageAccountsViewGroup); - View transactionReportDivider=nav_drawer.findViewById(R.id.manageTransactionReportDivider); - View transactionReportView=nav_drawer.findViewById(R.id.view_transaction_report); + View transactionReportDivider = nav_drawer.findViewById(R.id.manageTransactionReportDivider); + View transactionReportView = nav_drawer.findViewById(R.id.view_transaction_report); - if(action) { - withdrawView.setVisibility(View.VISIBLE); - manageAccountDivider.setVisibility(View.VISIBLE); - manageAccountViewGroup.setVisibility(View.VISIBLE); - transactionReportDivider.setVisibility(View.VISIBLE); - transactionReportView.setVisibility(View.VISIBLE); - } - else { - withdrawView.setVisibility(View.INVISIBLE); - manageAccountDivider.setVisibility(View.GONE); - manageAccountViewGroup.setVisibility(View.GONE); - transactionReportDivider.setVisibility(View.GONE); - transactionReportView.setVisibility(View.GONE); - } + if (action) { + withdrawView.setVisibility(View.VISIBLE); + manageAccountDivider.setVisibility(View.VISIBLE); + manageAccountViewGroup.setVisibility(View.VISIBLE); + transactionReportDivider.setVisibility(View.VISIBLE); + transactionReportView.setVisibility(View.VISIBLE); + } else { + withdrawView.setVisibility(View.INVISIBLE); + manageAccountDivider.setVisibility(View.GONE); + manageAccountViewGroup.setVisibility(View.GONE); + transactionReportDivider.setVisibility(View.GONE); + transactionReportView.setVisibility(View.GONE); + } } @@ -470,20 +481,19 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra if (walletNumber == null || walletNumber.length() <= 0) { walletNumber = getString(R.string.na_text); } - if(bankName!=null&&bankName.length()>1) - bankName=" ("+bankName+") "; + if (bankName != null && bankName.length() > 1) + bankName = " (" + bankName + ") "; - String gmeWalletNo=getString(R.string.gme_wallet_no_text); - controlNo.setText(Html.fromHtml(gmeWalletNo+" " + walletNumber + "" +bankName)); + String gmeWalletNo = getString(R.string.gme_wallet_no_text); + controlNo.setText(Html.fromHtml(gmeWalletNo + " " + walletNumber + "" + bankName)); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); - if(requestCode==APP_UPDATE_REQUEST&&resultCode==RESULT_OK) - { - this.presenter.storeAppUpdateDecision(data.getBooleanExtra(AppUpdateActivity.APP_UPDATE_NOT_NOW_TEMPORARY,false)); + if (requestCode == APP_UPDATE_REQUEST && resultCode == RESULT_OK) { + this.presenter.storeAppUpdateDecision(data.getBooleanExtra(AppUpdateActivity.APP_UPDATE_NOT_NOW_TEMPORARY, false)); } @@ -493,6 +503,7 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra protected void onDestroy() { super.onDestroy(); presenter.onViewDestroyed(); + ChannelIO.setChannelPluginListener(null); } @@ -509,4 +520,84 @@ public class HomeActivityV2 extends BaseActivity implements HomeParentViewContra public void onBackPressed() { showExitConfirmationDialog(); } + + class ChannelIOEventListener implements ChannelPluginListener, OnBootListener { + + @Override + public void willShowMessenger() { + + } + + @Override + public void willHideMessenger() { + + } + + @Override + public void onChangeBadge(int count) { + String countString; + if(count>99) + countString="99+"; + else + countString=count+""; + + presenter.persistNotificationCount(countString); + notificationCounterTxtView.setText(countString); + notificationCounterTxtView.setVisibility(View.VISIBLE); + } + + @Override + public void onReceivePush(PushEvent pushEvent) { + + } + + @Override + public boolean onClickChatLink(String url) { + return false; + } + + @Override + public boolean onClickRedirectUrl(String url) { + return false; + } + + @Override + public void onChangeProfile(String key, @Nullable Object value) { + + } + + @Override + public void onCompletion(ChannelPluginCompletionStatus status, @Nullable Guest guest) { + if (status == SUCCESS) { + ChannelIO.open(HomeActivityV2.this); + } else { + String serviceNotAvailable = getString(R.string.service_not_available); + switch (status) { + case NOT_INITIALIZED: + serviceNotAvailable += "(1)"; + break; + case NETWORK_TIMEOUT: + serviceNotAvailable += "(2)"; + break; + case NOT_AVAILABLE_VERSION: + serviceNotAvailable += "(3)"; + break; + case SERVICE_UNDER_CONSTRUCTION: + serviceNotAvailable += "(4)"; + break; + case REQUIRE_PAYMENT: + serviceNotAvailable += "(5)"; + break; + case ACCESS_DENIED: + serviceNotAvailable += "(6)"; + break; + case UNKNOWN_ERROR: + serviceNotAvailable += "(7)"; + break; + + } + showPopUpMessage(serviceNotAvailable, CustomAlertDialog.AlertType.FAILED, null); + } + } + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/gateway/RecipientAddV2Gateway.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/gateway/RecipientAddV2Gateway.java index 72adbaf5..93028149 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/gateway/RecipientAddV2Gateway.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/gateway/RecipientAddV2Gateway.java @@ -25,7 +25,8 @@ public class RecipientAddV2Gateway extends PrivilegedGateway implements Recipien } @Override - public Observable addRecipientAndSendToServer(String auth, String userId, String firstname, String middleName, String lastName, String country, String state, String district, String address, String relation, String mobileNo, String email, String transferReason, String selectedRecipientId,String city) { + public Observable addRecipientAndSendToServer(String auth, String userId, String firstname, String middleName, String lastName, String country, String state, String district, String address, + String relation, String mobileNo, String email, String transferReason, String selectedRecipientId,String city,String idNumber, String idType) { JsonObject jsonObject=new JsonObject(); jsonObject.addProperty("FirstName",firstname); @@ -41,6 +42,8 @@ public class RecipientAddV2Gateway extends PrivilegedGateway implements Recipien jsonObject.addProperty("TransferReason",transferReason); jsonObject.addProperty("Id",selectedRecipientId); jsonObject.addProperty("City",city); + jsonObject.addProperty("IdNumber",idNumber); + jsonObject.addProperty("IdType",idType); return HttpClientV2.getInstance().addRecipientV2(auth,userId,jsonObject); } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/ReceiverIdType.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/ReceiverIdType.java new file mode 100644 index 00000000..19311779 --- /dev/null +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/ReceiverIdType.java @@ -0,0 +1,36 @@ +package com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class ReceiverIdType { + + @SerializedName("id") + @Expose + private String id; + @SerializedName("text") + @Expose + private String text; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + @Override + public String toString() { + return this.text; + } +} diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/RecipientRelatedModel.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/RecipientRelatedModel.java index 523d3f2a..918b40cf 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/RecipientRelatedModel.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientadd/RecipientRelatedModel.java @@ -8,85 +8,98 @@ import java.util.List; public class RecipientRelatedModel { - - @SerializedName("Country") - @Expose - private List country = null; - @SerializedName("TransferReasons") - @Expose - private List transferReasons = null; - @SerializedName("Relations") - @Expose - private List relations = null; - - public List getCountry() { - return country; - } - - public void setCountry(List country) { - this.country = country; - } - - public List getTransferReasons() { - return transferReasons; - } - - public void setTransferReasons(List transferReasons) { - this.transferReasons = transferReasons; - } - - public List getRelations() { - return relations; - } - - public void setRelations(List relations) { - this.relations = relations; - } - - - public CountryDetailModel getSelectedCountryModelFromList(String id) - { - if(country==null||country.size()<1) - return null; - else - { - for(CountryDetailModel item:country) - { - if(item.getId().equalsIgnoreCase(id)) - return item; - } - } + @SerializedName("Country") + @Expose + private List country = null; + @SerializedName("TransferReasons") + @Expose + private List transferReasons = null; + @SerializedName("Relations") + @Expose + private List relations = null; + + @SerializedName("ReceiverIdType") + @Expose + private List receiverIdType = null; + + public List getCountry() { + return country; + } + + public void setCountry(List country) { + this.country = country; + } + + public List getTransferReasons() { + return transferReasons; + } + + public void setTransferReasons(List transferReasons) { + this.transferReasons = transferReasons; + } + + public List getReceiverIdType() { + return receiverIdType; + } + + public void setReceiverIdType(List receiverIdType) { + this.receiverIdType = receiverIdType; + } + + public List getRelations() { + return relations; + } + + public void setRelations(List relations) { + this.relations = relations; + } + + + public CountryDetailModel getSelectedCountryModelFromList(String id) { + if (country == null || country.size() < 1) return null; + else { + for (CountryDetailModel item : country) { + if (item.getId().equalsIgnoreCase(id)) + return item; + } } + return null; + } - public RelationDetailModel getSelectedRelationModelFromList(String id) - { - if(relations==null||relations.size()<1) - return null; - else - { - for(RelationDetailModel item:relations) - { - if(item.getId().equalsIgnoreCase(id)) - return item; - } - } + public RelationDetailModel getSelectedRelationModelFromList(String id) { + if (relations == null || relations.size() < 1) return null; + else { + for (RelationDetailModel item : relations) { + if (item.getId().equalsIgnoreCase(id)) + return item; + } } + return null; + } - public TransferDetailModel getSelectedTransferModelFromList(String id) - { - if(transferReasons==null||transferReasons.size()<1) - return null; - else - { - for(TransferDetailModel item:transferReasons) - { - if(item.getId().equalsIgnoreCase(id)) - return item; - } + public TransferDetailModel getSelectedTransferModelFromList(String id) { + if (transferReasons == null || transferReasons.size() < 1) + return null; + else { + for (TransferDetailModel item : transferReasons) { + if (item.getId().equalsIgnoreCase(id)) + return item; } + } + return null; + } + public ReceiverIdType getSelectedReceiverIdTypeFromList(String id) { + if (receiverIdType == null || receiverIdType.size() < 1) return null; + else { + for (ReceiverIdType item : receiverIdType) { + if (item.getId().equalsIgnoreCase(id)) + return item; + } } + return null; + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientlisting/RecipientInfoModel.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientlisting/RecipientInfoModel.java index c75403e5..f87026b9 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientlisting/RecipientInfoModel.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/model/recipientlisting/RecipientInfoModel.java @@ -70,6 +70,13 @@ public class RecipientInfoModel implements Parcelable { @SerializedName("userId") @Expose private String userId; + @SerializedName("idType") + @Expose + private String idType; + @SerializedName("idNumber") + @Expose + private String idNumber; + public String getMobileNumber() { @@ -240,6 +247,51 @@ public class RecipientInfoModel implements Parcelable { this.countryCode = countryCode; } + public String getIdType() { + return idType; + } + + public void setIdType(String idType) { + this.idType = idType; + } + + public String getIdNumber() { + return idNumber; + } + + public void setIdNumber(String idNumber) { + this.idNumber = idNumber; + } + + public RecipientInfoModel() { + } + + @Override + public String toString() { + return "RecipientInfoModel{" + + "mobileNumber='" + mobileNumber + '\'' + + ", district='" + district + '\'' + + ", reasonId='" + reasonId + '\'' + + ", relation='" + relation + '\'' + + ", country='" + country + '\'' + + ", dpUrl='" + dpUrl + '\'' + + ", city='" + city + '\'' + + ", relationId='" + relationId + '\'' + + ", countryId='" + countryId + '\'' + + ", countryCode='" + countryCode + '\'' + + ", state='" + state + '\'' + + ", email='" + email + '\'' + + ", middleName='" + middleName + '\'' + + ", firstName='" + firstName + '\'' + + ", recipientId='" + recipientId + '\'' + + ", reason='" + reason + '\'' + + ", districtId='" + districtId + '\'' + + ", stateId='" + stateId + '\'' + + ", lastName='" + lastName + '\'' + + ", address='" + address + '\'' + + ", userId='" + userId + '\'' + + '}'; + } @Override public int describeContents() { @@ -269,9 +321,8 @@ public class RecipientInfoModel implements Parcelable { dest.writeString(this.lastName); dest.writeString(this.address); dest.writeString(this.userId); - } - - public RecipientInfoModel() { + dest.writeString(this.idType); + dest.writeString(this.idNumber); } protected RecipientInfoModel(Parcel in) { @@ -296,9 +347,11 @@ public class RecipientInfoModel implements Parcelable { this.lastName = in.readString(); this.address = in.readString(); this.userId = in.readString(); + this.idType = in.readString(); + this.idNumber = in.readString(); } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final Creator CREATOR = new Creator() { @Override public RecipientInfoModel createFromParcel(Parcel source) { return new RecipientInfoModel(source); @@ -309,31 +362,4 @@ public class RecipientInfoModel implements Parcelable { return new RecipientInfoModel[size]; } }; - - @Override - public String toString() { - return "RecipientInfoModel{" + - "mobileNumber='" + mobileNumber + '\'' + - ", district='" + district + '\'' + - ", reasonId='" + reasonId + '\'' + - ", relation='" + relation + '\'' + - ", country='" + country + '\'' + - ", dpUrl='" + dpUrl + '\'' + - ", city='" + city + '\'' + - ", relationId='" + relationId + '\'' + - ", countryId='" + countryId + '\'' + - ", countryCode='" + countryCode + '\'' + - ", state='" + state + '\'' + - ", email='" + email + '\'' + - ", middleName='" + middleName + '\'' + - ", firstName='" + firstName + '\'' + - ", recipientId='" + recipientId + '\'' + - ", reason='" + reason + '\'' + - ", districtId='" + districtId + '\'' + - ", stateId='" + stateId + '\'' + - ", lastName='" + lastName + '\'' + - ", address='" + address + '\'' + - ", userId='" + userId + '\'' + - '}'; - } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2InteractorInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2InteractorInterface.java index 516ad403..10cc0a71 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2InteractorInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2InteractorInterface.java @@ -28,6 +28,8 @@ public interface RecipientAddV2InteractorInterface extends BaseInteractorInterfa String email, String transferReason, String selectedRecipientId, - String city); + String city, + String idNumber, + String idType); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2Presenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2Presenter.java index cc811101..411d308c 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2Presenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2Presenter.java @@ -1,7 +1,5 @@ package com.gmeremit.online.gmeremittance_native.recipientV2.presenter.recipientadd; -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; @@ -10,6 +8,7 @@ import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.A import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.DistrictDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ProvinceDetailModel; +import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ReceiverIdType; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RecipientRelatedDataApiResponse; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RecipientRelatedModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RelationDetailModel; @@ -52,11 +51,10 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA @Override public void addRecipient(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, - String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer, String selectedRecipientId,String city) { + String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer, String selectedRecipientId, String city, String idNumber, ReceiverIdType idType) { - if(validateData(firstName,middleName,lastName,selectedCountry,selectedProvince,selectedDistrict,address,selectedRelation,mobileNo,email,selectedTransfer,city)) - { + if (validateData(firstName, middleName, lastName, selectedCountry, selectedProvince, selectedDistrict, address, selectedRelation, mobileNo, email, selectedTransfer, city, idNumber, idType)) { this.compositeDisposable.add(this.gateway.addRecipientAndSendToServer(gateway.getAuth(), gateway.getUserID(), firstName, middleName, lastName, @@ -68,7 +66,9 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA email, selectedTransfer.getId(), selectedRecipientId, - city + city, + idNumber, + idType.getId() ) .doOnSubscribe(disposable -> view.showProgressBar(true, getStringfromStringId(R.string.processing_request_text))) .doFinally(() -> view.showProgressBar(false, "")) @@ -82,34 +82,53 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA private boolean validateData(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, - String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer,String city) - { - boolean isValid= true; - - if(!validateFirstName(firstName)) - isValid=false; - if(!validateLastName(lastName)) - isValid=false; - if(!validateAddress(address)) - isValid=false; - if(!validateMobile(mobileNo)) - isValid=false; - if(!validateLocation(selectedCountry,selectedProvince,selectedDistrict)) - isValid=false; - if(!validatRelation(selectedRelation)) - isValid=false; - if(!validatTransfer(selectedTransfer)) - isValid=false; - if(!validateCity(city)) - isValid=false; - + String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer, String city, String idNumber, ReceiverIdType idType) { + boolean isValid = true; + + if (!validateFirstName(firstName)) + isValid = false; + if (!validateLastName(lastName)) + isValid = false; + if (!validateAddress(address)) + isValid = false; + if (!validateMobile(mobileNo)) + isValid = false; + if (!validateLocation(selectedCountry, selectedProvince, selectedDistrict)) + isValid = false; + if (!validatRelation(selectedRelation)) + isValid = false; + if (!validatTransfer(selectedTransfer)) + isValid = false; + if (!validateCity(city)) + isValid = false; + if (!validateIdType(idType)) + isValid = false; + if (!validateIdNumber(idNumber)) + isValid = false; return isValid; } + private boolean validateIdNumber(String idNumber) { + if (!checkStringNotEmpty(idNumber)) { + view.setErrorOnIdNumber(getStringfromStringId(R.string.idnumber_error)); + return false; + } + view.setErrorOnIdNumber(null); + return true; + } + + private boolean validateIdType(ReceiverIdType idType) { + if (idType == null) { + view.setErrorOnIdType(getStringfromStringId(R.string.idtype_error)); + return false; + } + view.setErrorOnIdType(null); + return true; + } + private boolean validateCity(String city) { - if(!checkStringNotEmpty(city)) - { + if (!checkStringNotEmpty(city)) { view.setErrorOnCity(getStringfromStringId(R.string.city_error)); return false; } @@ -119,10 +138,8 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA } - private boolean validateFirstName(String firstName) - { - if(!checkStringNotEmpty(firstName)) - { + private boolean validateFirstName(String firstName) { + if (!checkStringNotEmpty(firstName)) { view.setErrorOnFirstName(getStringfromStringId(R.string.first_name_error)); return false; } @@ -131,10 +148,8 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA return true; } - private boolean validateLastName(String lastName) - { - if(!checkStringNotEmpty(lastName)) - { + private boolean validateLastName(String lastName) { + if (!checkStringNotEmpty(lastName)) { view.setErrorOnLastName(getStringfromStringId(R.string.last_name_error)); return false; } @@ -142,20 +157,17 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA return true; } - private boolean validateAddress(String address) - { - if(!checkStringNotEmpty(address)) - { + private boolean validateAddress(String address) { + if (!checkStringNotEmpty(address)) { view.setErrorOnAddress(getStringfromStringId(R.string.address_error)); return false; } view.setErrorOnAddress(null); return true; } - private boolean validateMobile(String mobile) - { - if(!checkStringNotEmpty(mobile)) - { + + private boolean validateMobile(String mobile) { + if (!checkStringNotEmpty(mobile)) { view.setErrorOnMobileNumber(getStringfromStringId(R.string.mobile_number_error)); return false; } @@ -163,20 +175,17 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA return true; } - private boolean validatRelation(RelationDetailModel selectedRelation) - { - if(selectedRelation==null) - { + private boolean validatRelation(RelationDetailModel selectedRelation) { + if (selectedRelation == null) { view.setErrorOnRelation(getStringfromStringId(R.string.relation_error)); return false; } view.setErrorOnRelation(null); return true; } - private boolean validatTransfer(TransferDetailModel selectedTransferReason) - { - if(selectedTransferReason==null) - { + + private boolean validatTransfer(TransferDetailModel selectedTransferReason) { + if (selectedTransferReason == null) { view.setErrorOnTransferReason(getStringfromStringId(R.string.transfer_reason_error)); return false; } @@ -185,7 +194,6 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA } - @Override public void prepareRecipientForEdit(RecipientInfoModel recipientToBeEdited) { compositeDisposable.add(Observable.zip(this.gateway.getRelatedDataFromServer(gateway.getAuth()).subscribeOn(Schedulers.io()), @@ -206,24 +214,22 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA if (country.getIsProvienceReq().equalsIgnoreCase(Constants.TRUE_STRING)) { boolean hasState; boolean hasDistrict; - if (province != null ) { + if (province != null) { view.setErrorOnProvince(null); - hasState=true; + hasState = true; } else { view.setErrorOnProvince(getStringfromStringId(R.string.select_province_error)); - hasState= false; + hasState = false; } - if(district!=null) { + if (district != null) { view.setErrorOnDistrict(null); - hasDistrict= true; - } - else - { + hasDistrict = true; + } else { view.setErrorOnDistrict(getStringfromStringId(R.string.select_district_error)); - hasDistrict= false; + hasDistrict = false; } - return hasState&&hasDistrict; + return hasState && hasDistrict; } else { view.setErrorOnProvince(null); view.setErrorOnDistrict(null); @@ -266,7 +272,7 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA @Override protected void unauthorizedAccess(String message) { gateway.clearAllUserData(); - view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT,alertType -> view.logout()); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); } } @@ -297,7 +303,7 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA @Override protected void unauthorizedAccess(String message) { gateway.clearAllUserData(); - view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT,alertType -> view.logout()); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); } } @@ -341,6 +347,7 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA CountryDetailModel selectedCountryDetailModel = metaData.getSelectedCountryModelFromList(editableData.getCountryId()); TransferDetailModel selectedTransferDetailModel = metaData.getSelectedTransferModelFromList(editableData.getReasonId()); RelationDetailModel selectedRelationDetailModel = metaData.getSelectedRelationModelFromList(editableData.getRelationId()); + ReceiverIdType selectedReceiverIdType = metaData.getSelectedReceiverIdTypeFromList(editableData.getIdType()); ProvinceDetailModel selectedProvinceDetailModel = null; DistrictDetailModel selectedDistrictDetailModel = null; @@ -353,6 +360,7 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA } } + view.showDataForEditing(editableData.getFirstName(), editableData.getMiddleName(), editableData.getLastName(), selectedCountryDetailModel, selectedProvinceDetailModel, @@ -362,7 +370,10 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA editableData.getMobileNumber(), editableData.getEmail(), selectedTransferDetailModel, - editableData.getCity()); + editableData.getCity(), + editableData.getIdNumber(), + selectedReceiverIdType + ); view.showRelatedData(metaData); @@ -386,7 +397,7 @@ public class RecipientAddV2Presenter extends BasePresenter implements RecipientA @Override protected void unauthorizedAccess(String message) { gateway.clearAllUserData(); - view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT,alertType -> view.logout()); + view.showPopUpMessage(message, CustomAlertDialog.AlertType.ALERT, alertType -> view.logout()); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2PresenterInterface.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2PresenterInterface.java index 70458017..83997791 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2PresenterInterface.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/presenter/recipientadd/RecipientAddV2PresenterInterface.java @@ -5,6 +5,7 @@ import com.gmeremit.online.gmeremittance_native.base.BasePresenterInterface; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.DistrictDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ProvinceDetailModel; +import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ReceiverIdType; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RecipientRelatedModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RelationDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.TransferDetailModel; @@ -14,7 +15,7 @@ public interface RecipientAddV2PresenterInterface extends BasePresenterInterface void getAllData(); - void addRecipient(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer, String selectedRecipientId,String city); + void addRecipient(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer, String selectedRecipientId, String city, String idNumber, ReceiverIdType idType); void prepareRecipientForEdit(RecipientInfoModel recipientToBeEdited); @@ -32,7 +33,9 @@ public interface RecipientAddV2PresenterInterface extends BasePresenterInterface String mobileNo, String email, TransferDetailModel selectedTransfer, - String city); + String city, + String idNumber, + ReceiverIdType idType); void returnToCallingActivityForSucess(); @@ -55,5 +58,9 @@ public interface RecipientAddV2PresenterInterface extends BasePresenterInterface void setErrorOnDistrict(String message); void setErrorOnLastName(String message); + + void setErrorOnIdType(String message); + + void setErrorOnIdNumber(String stringfromStringId); } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/view/recipientadd/RecipientAddV2Activity.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/view/recipientadd/RecipientAddV2Activity.java index 6438970e..13f830f1 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/view/recipientadd/RecipientAddV2Activity.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/recipientV2/view/recipientadd/RecipientAddV2Activity.java @@ -3,19 +3,24 @@ package com.gmeremit.online.gmeremittance_native.recipientV2.view.recipientadd; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.support.constraint.ConstraintLayout; import android.support.design.widget.TextInputLayout; +import android.support.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import com.gmeremit.online.gmeremittance_native.R; import com.gmeremit.online.gmeremittance_native.base.BaseActivity; import com.gmeremit.online.gmeremittance_native.customwidgets.GenericTextListingDialog; import com.gmeremit.online.gmeremittance_native.customwidgets.GmeTextView; +import com.gmeremit.online.gmeremittance_native.customwidgets.exchangecountrylistingdialog.CountryFlagMapper; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.CountryDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.DistrictDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ProvinceDetailModel; +import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.ReceiverIdType; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RecipientRelatedModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.RelationDetailModel; import com.gmeremit.online.gmeremittance_native.recipientV2.model.recipientadd.TransferDetailModel; @@ -65,6 +70,10 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick EditText ed_transfer; @BindView(R.id.ed_city) EditText ed_city; + @BindView(R.id.ed_idType) + EditText ed_idType; + @BindView(R.id.ed_id_number) + EditText ed_id_number; @BindView(R.id.firstnameWrapper) TextInputLayout firstnameWrapper; @@ -90,6 +99,10 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick TextInputLayout transferWrapper; @BindView(R.id.cityWrapper) TextInputLayout cityWrapper; + @BindView(R.id.idTypeWrapper) + TextInputLayout idTypeWrapper; + @BindView(R.id.idNumberWrapper) + TextInputLayout idNumberWrapper; @BindView(R.id.countryViewContainer) ViewGroup countryViewContainer; @@ -101,6 +114,12 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick ViewGroup relationViewContainer; @BindView(R.id.transferViewContainer) ViewGroup transferViewContainer; + @BindView(R.id.idTypeViewContainer) + ViewGroup idTypeViewContainer; + @BindView(R.id.selectedCountryIcon) + ImageView selectedCountryIcon; + @BindView(R.id.mobileViewContainer) + ConstraintLayout mobileViewContainer; @BindView(R.id.btn_submit) Button submitButton; @@ -115,10 +134,13 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick private TransferDetailModel selectedTransferReason; private RelationDetailModel selectedRelation; private DistrictDetailModel selectedDistrict; + private ReceiverIdType selectedIdType; private List transferReasonList; private List countryList; private List relationList; + private List idTypeList; + private RecipientInfoModel recipientToBeEdited = null; @@ -129,6 +151,7 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick GenericTextListingDialog districtListingDialog; GenericTextListingDialog provinceListingDialog; GenericTextListingDialog countryListingDialog; + GenericTextListingDialog idTypeListingDialog; /** @@ -208,6 +231,7 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick ed_district.setOnClickListener(this); ed_relation.setOnClickListener(this); ed_transfer.setOnClickListener(this); + ed_idType.setOnClickListener(this); iv_back.setOnClickListener(this); submitButton.setOnClickListener(this); } @@ -220,6 +244,7 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick ed_district.setOnClickListener(null); ed_relation.setOnClickListener(null); ed_transfer.setOnClickListener(null); + ed_idType.setOnClickListener(null); iv_back.setOnClickListener(null); submitButton.setOnClickListener(null); } @@ -246,6 +271,9 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick case R.id.ed_transfer: showTransferListingInDialogV2(); break; + case R.id.ed_idType: + showIdTypeListingInDialogV2(); + break; case R.id.iv_back: onBackPressed(); break; @@ -262,12 +290,31 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick ed_email.getText().toString(), selectedTransferReason, selectedRecipientId, - ed_city.getText().toString() + ed_city.getText().toString(), + ed_id_number.getText().toString(), + selectedIdType ); break; } } + private void showIdTypeListingInDialogV2() { + hideKeyBoard(); + if (idTypeListingDialog == null) + idTypeListingDialog = new GenericTextListingDialog<>(); + idTypeListingDialog.setData(this.idTypeList); + idTypeListingDialog.setListener(selectedIdType -> + { + this.selectedIdType = selectedIdType; + this.ed_idType.setText(selectedIdType.toString()); + idTypeListingDialog.dismiss(); + }); + idTypeListingDialog.setHintAndTitle(getString(R.string.search_id_text), getString(R.string.select_id_type_text), getString(R.string.no_id_type_found_text)); + idTypeListingDialog.disableSearch(false); + if (!idTypeListingDialog.isAdded()) + idTypeListingDialog.show(getSupportFragmentManager(), "TRANSFERDIALOG"); + } + private void showTransferListingInDialogV2() { hideKeyBoard(); @@ -356,11 +403,12 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick if (countryListingDialog == null) countryListingDialog = new GenericTextListingDialog<>(); countryListingDialog.setData(this.countryList); - countryListingDialog.setListener(countryPaymentService -> + countryListingDialog.setListener(country -> { - this.selectedCountry = countryPaymentService; - this.ed_country.setText(countryPaymentService.getName()); - if (countryPaymentService.getIsProvienceReq().equalsIgnoreCase(Constants.TRUE_STRING)) { + this.selectedCountry = country; + showFlagInMobileView(this.selectedCountry.getCode()); + this.ed_country.setText(country.getName()); + if (country.getIsProvienceReq().equalsIgnoreCase(Constants.TRUE_STRING)) { ed_province.setText(""); selectedProvince = null; selectedDistrict = null; @@ -382,22 +430,35 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick countryListingDialog.show(getSupportFragmentManager(), "CountryListingDialog"); } + private void showFlagInMobileView(String code) { + + int flagId= CountryFlagMapper.getFlagFromCountryCode(code); + selectedCountryIcon.setImageResource(flagId); + TransitionManager.beginDelayedTransition(mobileViewContainer); + selectedCountryIcon.setVisibility(View.VISIBLE); + + } + @Override public void showRelatedData(RecipientRelatedModel data) { this.transferReasonList = data.getTransferReasons(); this.countryList = data.getCountry(); this.relationList = data.getRelations(); + this.idTypeList=data.getReceiverIdType(); } @Override - public void showDataForEditing(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, String address, RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer,String city) { + public void showDataForEditing(String firstName, String middleName, String lastName, CountryDetailModel selectedCountry, ProvinceDetailModel selectedProvince, DistrictDetailModel selectedDistrict, String address, + RelationDetailModel selectedRelation, String mobileNo, String email, TransferDetailModel selectedTransfer,String city,String idNumber,ReceiverIdType idType) { ed_firstname.setText(firstName); ed_middlename.setText(middleName); ed_lastname.setText(lastName); this.selectedCountry = selectedCountry; this.selectedProvince = selectedProvince; this.selectedDistrict = selectedDistrict; + this.selectedIdType=idType; + ed_id_number.setText(idNumber); ed_address.setText(address); this.selectedRelation = selectedRelation; ed_mobile_no.setText(mobileNo); @@ -405,8 +466,10 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick ed_city.setText(city); this.selectedTransferReason = selectedTransfer; - if (this.selectedCountry != null) + if (this.selectedCountry != null) { ed_country.setText(this.selectedCountry.getName()); + showFlagInMobileView(this.selectedCountry.getCode()); + } if (this.selectedProvince != null) { ed_province.setText(this.selectedProvince.getText()); @@ -421,8 +484,11 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick if (this.selectedRelation != null) ed_relation.setText(this.selectedRelation.getText()); - if (selectedTransferReason != null) - ed_transfer.setText(selectedTransferReason.getText()); + if (this.selectedTransferReason != null) + ed_transfer.setText(this.selectedTransferReason.getText()); + + if (this.selectedIdType != null) + ed_idType.setText(this.selectedIdType.getText()); } @Override @@ -481,4 +547,14 @@ public class RecipientAddV2Activity extends BaseActivity implements View.OnClick public void setErrorOnLastName(String message) { lastnameWrapper.setError(message); } + + @Override + public void setErrorOnIdType(String message) { + idTypeWrapper.setError(message); + } + + @Override + public void setErrorOnIdNumber(String message) { + idNumberWrapper.setError(message); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java index 8a92dee5..0afd2748 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/presenter/SplashScreenPresenter.java @@ -54,11 +54,11 @@ public class SplashScreenPresenter extends BasePresenter implements SplashScreen e.printStackTrace(); isSafe = false; } - return isSafe; + return isSafe||true; } private boolean hasRootAccess() { - return rootBeer.isRootedWithoutBusyBoxCheck(); + return rootBeer.isRootedWithoutBusyBoxCheck()&&false; } @Override diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java index 7cb8a9da..563b4af4 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/splash_screen/view/SplashScreen.java @@ -438,7 +438,7 @@ public class SplashScreen extends BaseActivity implements View.OnClickListener, private void initAntiDebugger() { boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)); - if (isDebuggable) + if (isDebuggable&&false) startAntiDebugger(); } diff --git a/app/src/main/res/drawable-v24/ic_chat.png b/app/src/main/res/drawable-v24/ic_chat.png new file mode 100644 index 0000000000000000000000000000000000000000..459c760c465c9869e70a0c99e5c0fd2753ee4350 GIT binary patch literal 1918 zcmV-^2Z8vBP)^+C6JKD*fNy$QUO&Til7hl zBGD>s5}5+gc=I1FiisqiDV)|swzZOQISor7Bbk z_<=&;k<@E8!as2e&5ajgPwRa6wl6S+GD*{<+ax9pBY;F6+;yq>;;B`q!8F4=U(r;i7VeLhoz z@(W zpkQv4g}Yfk-gu^Y@s;2tT&3FN-L((E@8*FcOJP^y-8a z5D5l-B|YXX5jMD^E<31l>Q;gE^hA{~Zc|Y({vLDqK`T6f2pjx8<}VXg(S?8bpM0<9^70Ks-9Vs9JkOlH=hi>bnnwqUEtHlgT=l%<_gm`x6d>h z%}Ge*{A=OP!6&0yfX`=Yn6-rm5P!c{YDPU7yhyI+^ZrNnmbBAFr}4$UQrg^n2f#b{ zG@i)aiQU4Bkn`R3%vret$;)*|<{0QeocQG{^uKcojZHYyO-GRxo3j&m6;drgL2j0X zBDQvNM40!-edK&^y&W;Oi8o!Qb5k{Xw|DB9g{DATxJp0`Ky*pfYP;K5IqScb^}+*q zmoFoK>lS;NmF3a$&?-p%1T9N8+ZGbc$oAjlzWue3?YvfkEigC=BzJFZAvrm=ML5OL zw}o#5n9s{s1aQ7}{U8$htYT%U5oPUkE152gl~`v|CpHf!s>{8=(oESOsJ}qp$vRAN z5qVp;V2VaeGZG1U|9*maV-s_}v6|c;{QzWmW*+u-{{cAbKnp8*g%`)|6ozC2{B z|IEKAK3NN1FK!}GX;KH3uG4$`?V-X0B-*YL|F|)AW6^iwol)=i9e;cH`ozgmY4N7Z z#4k0wu2I2nNS@NVj+sC2zGp+t*a$MWV07BN!V&M?FKJ}Dixe6%wDFO@<3&7+9~-*Q zd+r&$%PNyMBFx>hd#FiEUM_QY|8h9*%iA#vA058m{sNvS7H2}{Bkp#p5tu+J#qYk! zK>Yl1 zVgN@2tku=!k{lb~zU|041fbbqB;v$E?1OWVu;rZLnEro$;LLzXlTqPACpO~EpV0lA z-=e*J&csXw%i`{z{!D+}X=i4P=d1wSC<}#gxF;a_d3Y-;klb8ypL>SfAAWyS`oM*Y z^z7a5}*W5Pk3dX}xNL4_}1M`yGABi_z=Jr$1 z(|_tcw@o`kX!5s)8z5By0;=etOnghf{E{zz{%d;va4-|*?V);T(B<}_KN=f494%>S z=|(s(eY&!Q$brGa!#$_Nv6!_VbQZ4-G@29FQDgC_3RrwSa$7`R$*!pEAu78@`UXH6 zA0Y+PQMTgj?DG+W@`zRyKQz`|oyGrRT)y75@m={(BQ`Ux&*X>1kvN#=EB z2SIj>qk;DDOXCGojO!{Z zU_}e8ZK|AdUt4BTw-=DE^#3$kOpA6`0a9Sq;7s46F6j?A3NlKr45 zhhcM}YE||!ondn-yGpNy|C-gXxsh}|5i08UN)4(tWN#_miO7MRxbDAqZa-Dr4xRm} zAUiS~I{TXO4ICV~q;+W1T@)l*9$IB3*phNZv+vB8B#iRD@o?1N8g7`e!P8^$S;fjy zV + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home_v2.xml b/app/src/main/res/layout/activity_home_v2.xml index fe75d3b5..f4f461c7 100644 --- a/app/src/main/res/layout/activity_home_v2.xml +++ b/app/src/main/res/layout/activity_home_v2.xml @@ -41,13 +41,28 @@ + + + + + + + + + + + + + - - - - + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_common_error.xml b/app/src/main/res/layout/dialog_common_error.xml index 8ff96847..f42a7833 100644 --- a/app/src/main/res/layout/dialog_common_error.xml +++ b/app/src/main/res/layout/dialog_common_error.xml @@ -39,10 +39,26 @@ android:layout_width="match_parent" android:layout_height="1dp" android:background="#CDCED2" /> - + + + + diff --git a/app/src/main/res/layout/fragment_customer_support.xml b/app/src/main/res/layout/fragment_customer_support.xml index 18b3808d..fcfaccd6 100644 --- a/app/src/main/res/layout/fragment_customer_support.xml +++ b/app/src/main/res/layout/fragment_customer_support.xml @@ -1,6 +1,7 @@ + + android:paddingRight="30dp" + android:visibility="visible"> + android:src="@drawable/ic_chat" /> - + android:layout_height="match_parent"> + + + + + + + + - + android:src="@drawable/ic_support_phone" /> + + আজকের রেট আপনি পাঠাচ্ছেন প্রাপক পাবে - ্রেরণের ধরণ বাছাই করুণ + প্রেরণের ধরণ বাছাই করুণ ট্রান্সফার ফি অন্তর্ভুক্ত বর্তমান এক্সচেঞ্জ রেট প্রাপক পাবে diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8e1a24c..7d2ac2eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -530,6 +530,12 @@ Applied Amount Token Renewal Do you want to renew your registered auto debit accounts? + Service not available. + Do you want to start chat? + Id Type + Id Number + Please select an Id Type + Id number cannot be empty