From 4ce2682203f07e1c823ea4fc620d3be5f53e304d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samet=20G=C3=BCzel?= Date: Fri, 18 Jun 2021 20:44:09 +0300 Subject: [PATCH] CloudDB custom editor configured. Generated C# model from JSON file. Changed all Error logs to give a better explanation about the error and error code. Added IsSandboxActivated to HMSIAPManager. Added ObtainOwnedPurchaseRecord method to HMSIAPManager. Added IsRewardedAdLoaded property to HMSAdsKitManager. Fixed SubscribeSnapshot method on CloudDB. Fixed the bug that corrupts manager scripts on the scene when upgrading from a lower version of HMS Unity Plugin. Fixed GetLeaderboardData method functionality. --- Assets/Huawei/Dlls/HuaweiMobileServices.dll | Bin 235008 -> 235520 bytes .../Editor/Extensions/StringExtensions.cs | 15 ++ .../Huawei/Editor/Utils/HMSPackageChecker.cs | 30 +++ .../Editor/Utils/HMSPackageChecker.cs.meta | 11 + Assets/Huawei/Editor/View/CloudDBTab.meta | 8 + .../CloudDBTab/HMSCloudDBSettingsDrawer.cs | 222 ++++++++++++++++++ .../HMSCloudDBSettingsDrawer.cs.meta | 11 + .../View/CloudDBTab/HMSCloudDBTabFactory.cs | 19 ++ .../CloudDBTab/HMSCloudDBTabFactory.cs.meta | 11 + .../View/MainWindow/AccountToggleEditor.cs | 31 ++- .../Editor/View/MainWindow/AdsToggleEditor.cs | 42 ++-- .../View/MainWindow/AnalyticsToggleEditor.cs | 47 ++-- .../MainWindow/AppMessagingToggleEditor.cs | 42 ++-- .../View/MainWindow/AuthToggleEditor.cs | 47 ++-- .../View/MainWindow/CloudDBToggleEditor.cs | 51 ++-- .../View/MainWindow/CrashToggleEditor.cs | 42 ++-- .../View/MainWindow/DriveKitToggleEditor.cs | 12 +- .../MainWindow/GameServiceToggleEditor.cs | 48 ++-- .../View/MainWindow/HMSMainKitsTabFactory.cs | 58 ++++- .../Editor/View/MainWindow/HMSMainWindow.cs | 4 - .../Editor/View/MainWindow/IAPToggleEditor.cs | 42 ++-- .../MainWindow/NearbyServiceToggleEditor.cs | 42 ++-- .../View/MainWindow/PushToggleEditor.cs | 44 ++-- .../MainWindow/RemoteConfigToggleEditor.cs | 42 ++-- .../Editor/View/MainWindow/ToggleEditor.cs | 15 ++ .../View/MainWindow/ToggleEditor.cs.meta | 11 + .../Scripts/Account/HMSAccountManager.cs | 4 + Assets/Huawei/Scripts/Ads/HMSAdsKitManager.cs | 10 + .../AuthService/HMSAuthServiceManager.cs | 10 +- Assets/Huawei/Scripts/CloudDB/BookInfo.cs | 46 ++-- .../Scripts/CloudDB/HMSCloudDBManager.cs | 17 +- .../Scripts/Game/HMSAchievementsManager.cs | 17 +- Assets/Huawei/Scripts/Game/HMSGameManager.cs | 65 ++++- .../Scripts/Game/HMSLeaderboardManager.cs | 28 ++- Assets/Huawei/Scripts/IAP/HMSIAPManager.cs | 125 +++++++--- .../RemoteConfig/HMSRemoteConfigManager.cs | 2 + Assets/Huawei/VERSION | 2 +- 37 files changed, 972 insertions(+), 301 deletions(-) create mode 100644 Assets/Huawei/Editor/Utils/HMSPackageChecker.cs create mode 100644 Assets/Huawei/Editor/Utils/HMSPackageChecker.cs.meta create mode 100644 Assets/Huawei/Editor/View/CloudDBTab.meta create mode 100644 Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs create mode 100644 Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs.meta create mode 100644 Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs create mode 100644 Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs.meta create mode 100644 Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs create mode 100644 Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs.meta diff --git a/Assets/Huawei/Dlls/HuaweiMobileServices.dll b/Assets/Huawei/Dlls/HuaweiMobileServices.dll index fc442e90aed7a1596b6ae5d29e124b39153b0ead..09d7becd1f0f694daa9671fa80ad40983767a5c7 100644 GIT binary patch literal 235520 zcmeFacbpVO8b4eUc9z{`fhFt`B)c%|0D=Swk`@7xECK>blq?MN5QKGy1tdxE4Co=} zDXW+`a}KDO5wquc%9&3+j^jMjd4|LH`#jZEU0pr9;Jx9G_w(Bi^z`$6LOu1=Q=zMS zdPYq8jfe;#qWJ&IFG4(wPx|Z6$LbFiVApE?Xf1Jn&MPe+4h?^$bO0^RV=r0P|Y4EVUGErh6H2-N_6ra^aHI_sjPL{lBX<4@Obg6Xe? z5Ysw3DQ70m**Eye6}`gmXn!{P|?=T zaI7+(MZQi7JH_Cudcy#+o#E5`@B)e>tc|m*MYp1!u%^_O`PH(?+Q@Ju8eahe9Mm|H zGJrKD^WDP{j$k~8Bs9hHL?Ltu$*b2XESey`hk1E-28fZzFviK!M4%?&$^;F?TQ zbc#e?VZCUgqX;{#{T_Fw=1;<(M7^w7K~}OQlwmPibZ)(9K{WeVv|g+r*5QR%enRAw zP`@|@{v!8endlQW>xPasK+KzD*Gx1FI|*GXVv$I-f;p}-_o?IP_Nzj76^ExN9Ip$L z^^e6Uqf)IYAoXxoVzVh3QzsL&|47f8erbD0NOJXWCx`|`In=dagq*!egzIFTDmwSyII79Bfev_G^+ zUUw{%_AwNkfPDlv2K&fQx7qz;DfKVpOtgMpqIEcxfK$OXXNR8ac;f zv7tXe>ZjYo2#2ZzPL9Po;^>BoIMrLHJ~RZjkx;%q)FX`yk2+i6j~75W`k@;mfJtO> z?l$V}d9m!mWG7G}o4W}2OR|YU@I-COpe4~2bGP+EP1z>KWo2`|v(xlMP5^S8D|PmP zC1*JD*_>t6^eJOF0X|XBP8HUmCW@AaLn0armq+L$QXa*Ja6W{wyjU4w*>dbamr2Bq z#fqSm>H-VNt~dZ_Oh7jRy5rCWQ*A*+If7L5IWjWrq`;KJ@GNAA5G9-!$YUA+5hri7 z;)yLcfgZU5@HNm=(qg>ek6bzFVnPIs=;tO8 z;M^o)m`k%qy{v*PCzJ)NsBdnEUZ9$4sxPSCnkoe~PE&(HEz#6jiAe>~oa`7o5Fbnl zkQgVCZ6qX-ffAt(<073Ua*rp|Tq19INWSwO5r}rKz^L>=enGT-je@8a-ZNvvyv1Df}Uq5J4 zQ#gs3SX?7{2FVPf17d@|{{gz42%$%ZMN84Vzj7rcMvN3qFl&aIV1B1-3M?_uC*y!< ztUHq|48Pi^vt3(pO=Z(s}-NpKQaJ0?O!wEV#; zWlq>xNj_jXCs*fjOarkz_>5&HyiAn9pL6ImOJKcYt%tHIlW3oW>nkLw-8;Nu<%3)d z!7sUv8zN3i%jTx|p{{hfD93(xEm@ix2Rq&hvXQrfjG&P5U?wp>d*S)e7aqB2)a5l1 z#ctcF@{mAQdC0`$l!qlYa>s3s6D+S+*x5+Ioy5M<7#^lv5m=X@{788Y2L3RQ-8AR; zd8nMhi->m6!}6^l)s*L>a5=6UX(Gy{i71R2rWwsJlTlI}jexmEZswL}XmE*#S=0EhyC}zXjq#i3HD&m{@T9G+(<|`(^H}idon8+y@ z$rCN<9zPFWrxBRwu~13lGZYJ`aoLKHK5=bg*EnmZ;AL3fTan*#xq* zPQe@uKhTe&xrKSLx}o?CSz=w0MjA(HOCUFS0b>%t1fE-XEL^ijhxg^s6N}F#_Fqce z{*WV1?XCK6SYVW>stk?{`fd1w4$hEl@v}%NtPI9gDT2 zWa1=8f5e2AgX`S|TyU(6L{JX|`tK#J!to0UE*YO%h|daYuhb$sqekLYUy{{IO2hHR ze1`srei`)v7$_(e%hV?eEDBTp#GITQ-?)jpjyrJI83Z?Q9jRaRLHtl9=q|&Mjf=MkjYN{*t-ZWN^YF4>m`K6GKmZmI?0#M%8skThRQQX~VGKcU)_Z zv_u67NHKO2{gbmEn}4@KP|gOVSDz)#R=}QJqgWVM#3Vz2khfSo8oTD)Mww2X|YYmE&y z6Z1&SCov`Ld~B*K&9lPJQQ-2@1fw#hb(HjrDe7)WN+!H(nWyBrvRI79Xcw=yhEZAC zsGxecN4?Rnk#Ejq@O6KvwI6b_GR{0B8R1)* zzYuP)D%!D%I7`3(-)-Ma*|sW;aScgrRDd=})u5r%xzyPO5t+`UVJ32E8skFL`33^X zVr~SLduS>2A?8xIQIV7-#M?lY7l{ZxE>_&obMTN1{eUQih@A|xOlD=gEtQJMuFL=< z1uyr*GNn-HF5of+*+38}b?$+PtTolbUu%qLs5JzV*q6gihBN~O`4(`B1~@mVPqyH= zuy}^Jv@_x|7Ru5^jth3~mjTg(oZJG!c8I%kzg_Yhxi=K#PDy7<+v0{<-tPVu*wC?c z;rU^QU~QTYY*&SwyijbBQe*HPyy8wl0%;=&U32;h7vbvoc& z+9y`Y_^`7VhfJ1L6?2SD1*z_?ZZoOdTq&JqDY<1LlW}(gdOcjd7E-UJ((9R7k9@`G zP>|~7>R}^=+PF1+M9WWB>b)&>T?~tX4&=(UL$#Rh~0c4IJ!NOsg51CJfwrNPYxHEv< z=0}WL!{U^q_r6B3E5S&lzACXRA=K}~ybp!c7EW_; zrFnD@O!-7^MLJX<>!T@b^~d7aJBcN+^$|;A_a#<=l$MM%iNvun<1%2{=ikV18lzrR zPE@lHC~WL6mzb(+gxC4{ib9S_wC@jFv`%|l`;ILYxhx3Ce0l;h`3+PIe0E|q=c=+2 zkkNj*ZJ?!T?PACdGG*O57_t%C)1a+ls>1|bcK0glutdvfD}j2hI{}%?PC#bQ3CKKl z0y2k!G98`o0aj3}TZ!tW{b`hhSbhz6W(CL;Hs-{A|Buq2Z2H4b~b$mhUd>&Jy zN-yR>XttA=~ltX58Car2y7xj5$5%EK|QR?W&d z7lLBP>0%ck&QzzF8d1ah3XQM~R_r@8LhVO4kvJTWY4~&(`9dR{EHM9*M%V=yYuQi* z(PwOkhOrO9=FiuN^0h30>%Szg!j?q5J3P@WlsfOX7c*?bi8vaY2%K*#e2vwlu z(lnM;RW7*(ke~CVh_&P@CDwS!^5&j_gr+5$Y01U>Qs*u01eI=$vj5YP%fII8(nM7f zD?@Y5g(Y7!H3zdtd@-%6@YG@~xd?{}Og)m3CXx6;&A_tH=OETxSoa0iT!iUp2iIIt z+7}b3EY>ULqKgJhxd-pvxAV(-i?8F$dW*13ve|T7_+tNb@J?+L$B>c*sTuBitczTab(QO}Zq=>FNK~!IW?JhpT&kSVdJG){>#Y4Lij zjMiWm zNy998qHeHY=4x`1Zxjd8A%G0?Bb0A4_tF2k&(48>?%-|_!Is<%sS5I$?iemaI7G>N z&UXaj(j@APXo@o|o1)GgbcR)Ew8iJyLR4V&8Esy>0?W#1VFgxWzD!t^#_SMvBF#Jx z+|7nT6t+z4JWLRkbW0$C5uUYcLt9N1>VaomRI^B_(+*rYE08b(@00_vE-V?dV=#-R zDc^1%l;5$Hv9a8{x#zxnhs=F;3Jr2Tn6fmU+91BVI`O@JabsSFt#|xPAXzPZ)`7Iu zNEXEi$Uu#-2Y!=5acfye`4SVD69u|4_TI75aPMCwL>g9@pGY*oF$N#Ekf$`S%8O!sWRZ|uCZSF$tCV!S)JrGNIBP2ol-a}IW^2k>N=F= zA7p4BjmB$qI2x}%(_x_G#(2G2^=WrJO5hU-PO?84RZ1O!Wq00lH7m3x#RgYp0)2q= zTDJ5;q4p1k_ScNO);K6 z)@K?~Wqq#^C6ixl`EEWf4^W%)~usCs3!RsJZM;s7!*fFw1d%G#n4l~KDjqAb4=K&&|g?f!8< zCMT{uR6Z96klq?mWsTE_(ps$%C9_i_suueL$om1rnsqSK=CxBE&I(M#s8Vp^8mI^O zmTvc3piNvzQw6lP1&}*5qO@M|BYL?5pT5y7*C&`9R-*jmm|%im21E}T?t)5Qykg9| zUW-$}cyub+5Oy9hb&`L;m?byKf)8OIr|zm@EVoedTe@VLlH$b_62M0?z<7o)!q1*z z*@iXpdW`kCVW)ON)l?f$kH6MT6xQH}U-LyQC-o@Jm>Zx(4|g}lXNOO$r<5f`9zfP(dEX07)4ySihzc|966A^&`~2yvo|c`CWeJA%0hN;?{Zw;?Gnk zZgq2rzgwO7R{>}8J5|+k@VyMQS>;=UQUd&3Ic zyNWidm}J!pOZ}`4BJvB1Sog&6*L}|?lAR9Hp;e_S;G{V!7QR%*6=Mb29j(Rjr40uK~ zDhA`43>!TKsX4T-hkKvUXi5)w-?Kzir>u~9o8!IE|SZou{-3hdUf6sY}V?7G>aSY|ubO?GU*eH1vf(Yyjfv zOWBaHPvs==iCqc4F0W2$1Q*B-!v4(aM60sDqB@*Oq~aEeY;6 z2Q%=bKT!NI1Ctev_C@1oceB%~D1fvLAg2Y85dp-yBj_)7mKGmLm4PE=8W}~1UYEbx zpkf+2bAyWMI2KjR;O;#W$A%Rb;OJZqy$TF2QRjU+n~gJTK%;N2%O2Q@EaMha^X^8( zRgT<@$rZTTpvC>|qAd4TcEegKoiGdgo;-l#-Jm4Rqmyt|ru&iYVP~^pSl$Z5^ObIP zk0C9YpVSYqp+@<6Jv4Mu*!|#asHC=1KiH=F0p~Y5o9IV<^FrQp5102sAB@$?D(}so zvGUXL3FGv2-NxokeOZ9^iEi(^{bwwS%F9O2Ua0rsx1-E-e^}zLPxr;iv6w?#+EOpB zAWrf!oVKBb{Xw%HmGN_^vVcGH!{Z1}OIUYhdZN_z;)M8Bm<617ni0&(I7b|Cu^%2! zPOQQu3SgB5y0I$b>;trjty{*0&2KT!31(n$RyZF<{IkL`jqoUp#JW6yJfsm!AnUoF{(LTA2UYjx`6sPNN>mL!L|g-PbFGFRSOLG3-PgT?M(Ni{6HB%1D;3 zi@`!6lpQh*n6}xG0lHXe*;xRfVlK?5=^$4vRGQhzasT-pttUr7K;K)CzY0Y?Rnb^0 zaM3+A!Xpseo1+ny@f+BznQ9`vC4lVHh??r(*9dDNpS^f z_EL4Q$0ct(=`Y8V&JfjEYmX=Aq0H28&}CDX;~*zynlEu>B?gc_?g!=!e+0gKt<@*EIV)QwI`Pv_8e1qK05|#GXYeX${UI-vx1dy!W%8s4V zm@oT*X$NQuwZ*FRd`j-5!FLylQw{cILH0C*eNT{$`Ai#sKgh;Jr`bOR*_Z(}yZPy! z>#l2<8Z~=pkd66Lv&({POrn~7U673tj&6EB0*>sD6dd9?Bw)Q{xIUt@nX%yFvkOcH%K!=myRTZktmnGBw4-) zH4aD1;S;_9fTuH##oogT+xN|9^?Z9NtqCr6*8~GFKjZoKQhf0DAIfR!rX{=ked%5z zTt>E&$RXSYrg5MI;{fi~;QruZFr2&Khw3WEEkWFLYZ}oHNhrNDJiRwey*%1^;aiE& z8=&+`oo^r{vx>?xvx>&F2t5ZP29ZtoQ90eFJhSj+0&WY+7x|>FP{Y{_B~IU5;!JbD zRN-%hcKuZosp)i}M$|MhQ6rdXe2c+ru{jK;9uwtS9;+Dtb2Z5K;InbhXsas8J_{gO z1C)0v$%3oyA}yn8&?SJ3(1=RSc>%;)y~F3=BWuBjAj|!BjNmR0J3GNtX`^nW&!X!} z-q`v?e%0E{Egt3p9Pb&-?4!-VQgPjppL3yO&FE4|NbipbQmB|~FxiWOwNY{D9*PW@7UfHMm z5#mnkOUm62rjWfh#Vn9W?Lf>^SL48a3gwcDKZvqYOQ--O+Zga=Mk6;ktgC_iZ`DLt zN%_}=70aDlprUK;wi5et1)ie>PxpCF0oBB6GXigVBq4tlS;*bd!luGc)mU+;)`%0y zWHQ2h^SQN@HQ6GDZ3n9us_r>RBWePgqY)*uLnG?C<(>fYwnm1z?e$-cC_ASNQKhTl z;`{)zQ6oxgw??>h|CscgW}>#7CWkb#ln}r8e>GECZ+WKjNg*RNqG}tg{|YUmw1N@2 zPRpoy>=BJ{to^P9M^0<9L;}7I19k!~3)V7wsH)R)Hz-9KS>YmsG;)zLa1A;mChqZg zT8Wr?ReCYy(W&7w`b_>7LS|5nN*Jd|wGVXxD^&qleIgXJTXzIZT@lqmfd7&Shp`4{ zsT#F({r46sj9^@%Cyou9t4I(rOF&h_?)UeZ2eV_fS=H2+X+$;JZ5m-Ms^m@?C>VG^ zGnE$yfau~X<7KY9?*{~rW)}Rf7GwudfhNNYi|$aW%=QFNj)|)LQKqz4{wytsR^(xP za|S__cD)IkrOlUntiF-QwQn^1NW5lM7v-%4>kU_as#^61qT}S2Q|<<9mX=nvT4PFA z#+Bf80m1#51wYe*s{FhWRhQoxJbzS&n$lkR)3spQb$y*il#kvryoLc9xz-4=jf$qeU=2};9kQ@}EE6>iJ* z%Pcru3#v}D%M`Ra?b`wAyt9q+E$QCi`JEVNO1llx7lUntlF=PWuwk+UV%8Ys4Kq(_ zt7<%dOCwwd1j~10x-!0oVt`!x$}HY>mU+hD2JJ>;mEYV+){-`2n$R#eo}q&QafoJm z)gbIds{!wBgt%^awE9te~T$i4JWz^TZ z$QX@qSh3nI1ESrR{?MJBetZ?ehDwbW3?Rk%g%-QWj$T$^$ixF>YCmfjU5{1L^%ySl zCg1`K`&oEXf!xo!QC*U``&s^4HyLNt!)-cV)CB9uFxu<5b%e}Nn3ZwZKykpbXbvIT ze~f#E|G1A`kh;nBf2#CtWK}RzWr^+jDIAui0{ei~##KtoA zFM-N0Kgx>YT3)_8K;LdIbrL94Za|W-*=aDMtTsJzBO-4&VL`grWU7TKuH*>!I)J>o zrkCYNMRdjcOaZzcR6HmLc)n6I3iLOge8?z(d(8ULh>Qa4qw8Nr0oi$V&0on>b5!hO z19!h>s&&3Jc=~&uMrTc@F{DO)t9*B}8CP%gMnlQ>-mkWadLEjg_PM^Skp&{{I|G-^ z&cpF$5>KOl0M@O;7vpj)ywv5FSHa)n7I%H7;^4;qD)7&$z(W%=xJ}s(+~;2;Z8ZlDp%mN^Dmttq;?gspTfo;g$mGH)t8IzQ~EVqP#Efm7N9K(rz+oOE_oY7!2 z!j1z2dg{^7SV8MeZFwtMMr!*WRMJyMJlXho9^7!U&pJ!Pk`Fd5A$VP(Vg+v- z6_S~?omi{F&PZta_Gjelu(&|57gf)`x_b5#nc0`Qb^ioxBZTbj)nTXRc^O=)6-`}> zzEBze4JjKt;Kom0P#D0;^wGh)OKXpd0uOJ*?j60<*KTn_w^h`u$~BsnwT3# z@;)TJtTo0jm@C2kwfG#`fS~7!$7?&TZKG&7ZM`TG32FXRhPu;vr5nGOv@wPJQ6n5t zGJdXp+}AP=Uug~07N4WY=QuX>6L^OsbS6QE??D_Z#PX;~ay;2^zp+g3^=T8(iBGOt z1@+3{m%Ar}nEX{c?Z#w&8q3?LGjgiey!e(T_HB8LodnpIBkt-CTe{pA1N_Q3voJgd zSnjA*HNQX4ZdLQ;?03APF+v22uFfktX;fV*G8%Jk)%@N*{`~3!hNuMj{#pn5My)gI z%PC*^7u5IrALJYUBXj}2SM>nP9R*Z_1o*CM^;Rna0rOWV$oE$$$d`kS3P_OeuW*3x zdHp}I&_V&Nt^O7a^8Fd`+v5Zz$oE$`$T#exEdqS6g##?p^=eeBVId$vt40fCEi?>$oB^%$oB^%!1n?YU|9hP@V(@ziiHXXSnh9}sFV%z{Q>zr5Rl{XjS8dupuUlz zXv+ZKtJVL&%2=R30|Hj9sUpZXS{M%h#}0_+@c&;~$EvP!HLUv6tm)hfR5h$NRclqn z!c|)jXz2x`TMppCnc+#9;l&wX>`ZL}td}J+S-fYCxf@|MM?%^GGowm*6(ldWXz@d9 z#j7AJ7uD{%$iG&MPFHMR>tU7ECV=$S$TjYo@qz$ysUJBD3uTSS#W$6Ezg|XqHgQXi zSN5Jwg?Kg@F&u~aCo-6KSA(d;%bJT3guj~bZy;XKWH-}S1ubT%C}g?fr9eD!bN69V zm;>xwpmlIV&3Hl(*9e=4rFYtXhYKP+7Iz&!_+9*+gb=uJD@gqw2<;bMk5B9u-asGG z^4<90$KWb)Vm=0k#{9P~(``&#;S#1jH7}>UZyE5l#gr<(Wq{N@bEeOP%7pQNW$JKL zQ2tzvc;yooEFX2G=k2fyz<*NpB=r!9mD&D>K{(jnlO*&$KR3zULS5T<{?D+jpQQLT zw$;x3a_OJ0hI=vKmiL6@>g(^SN>J8}L`5oY&@oeS{apZg(2t-=Ue-u+WEZ_3JXXT> z&gN$y$I!J_By|M+DL0IX4bsYa_fanQU0CwbX}(750sXT{FLfg_i{C+X6Q$T59FjNV z(1xBLx`iNm;wXMAL9yg*_+Tq*MS4A5QPsJ?D@<;oxv!oqbvlA2haZx}hS&yD&<{k? z&;7;lobCoKMts_v{wENx$802&eQpPz$5LN;(A}G!Blo7~s=eulti5UUzSC!!wr+>} z=zV+ffdJCAYFF4ihiv`<81=t9@F`;9GLnfT@5HhEE*vNtcjMFSgK*Vv{vHUpcFEUq zWcOZRWcNONqF>*S5AM(p;KVfM&lB%k(AYtt7s73!*j-AMp_@p_T?TrqA1!sB2OtAa zTIR+JQoH@^z@(y575SM4SN3wwPuXuzLtW}}t_(wyMdHJ8jMC3z#d6cwFN-?Y8aCx~ zuh^)>n?f1(Z}k8qQG_!HCN;*85o@(^bnTEvxH6=4>q^144T;XP_?h z=PUwK2AaZ9nEDl;#*B#4$^EK45_c`(q^F^c)sNS z{8(UgYk%W*K(#*>cylH-Elc}M;ce;d*CL}xPnQm5CUq_ zilp{IQ9guhzQvJR?Fng87TOe@ME)f16%wWlSfVljucAZ-JWCnyB-q6j#ECy8B?rTn zbPw~veqipn-5UM+T=vQEnP%PGa2bikcuJ5HDb<12ZxcyABKfJOAw;vVS)mNGu#th| z(>pK{7{A1Wr6AvD=x@fPGLDrY4`d^CEE&P_*U^Yv!~*i((kvmg!6q$rgImDO84AF1 zBNMzT>^u%>z3k!JfLN-zzgDtcvV9Msdaq)Zzi3kG{23PHcu6%jdm-Gz{XBDliMZ0f zFn)53|D66{OWmuXo2G+v6EJ?yRt2s_T&{8gTr^e6b(ZJrJFk5tA!OZT5Bo9x*-ocGXgTJ{Kz8tHeKC+-7Qm8hVz)-w5xe;9z*47 z7}2o1sOOAE3f^S$+#H)9cAf&PuZTGXWojWiiB(m0g8k=e*hpStSDU<$`Bx?ruHRUa zbKk6Wp=tyb&Q1a39F3r5efPyi;^v)Zx+?(0|3!@{qkr`y#$W;yH5Mu#JQE`|rcBKC zBdgL_{zsj)KvjUl2r%w^Bh~0_m(0E!Y!zh5E^dgY0a(Pf@JY}DROu&V*g|YkCJXLL z(Rj?E4di5ZCpB}ZSc_GvVZ`_fv{zj#&llki98|nyJC&CdS>)IJ^d74C=LR2lhPX!C zJ(e#fZhEtf;c~5{a+xf`@Xb{l)~pjTe4#c>YA}q;vZ_4RtP?T(yf#c~W{{Ca_`OAU zJaOYXKaGpPs>;=@6DfBsOv}b4HLKh|+vUzc_XMU}Pj74B@{Sm)ME51$uD9dUw~@C$ zYHMf|`dTPy$g+u##J-)xDDSIE>}#b6<-QssyxcEtgelPNB5aBBKZ7Oi1HYG+s1Ibe z6zm6emMC}0x*4jgu@M2LGUW9G{`CXnn$8;H(HZWBo(`v*%~=#4|3LCO#N>?P#uQ`G zac75B>Ae(C>QAa+%zopHYeS8czSB#ZM>kRcY)aROe`Bb`_5PtQ{pa(@}JRb5mZV{apZ#-U+6xg>v*y ze#B_;+r!R}V5;PG9}S?#z4Vrx%Bs>dHb$b(IZNI32!1V&feH_32zWpi!;c}gS7 zo7XkMGNtT+?4D#0am40Jb#ctht|E^ALTS=CslhmQbgDC+nO%kPGnXmjq-HkK_%t?# z%mqG%ab7J{LPbU>MhF`7X&`pb)C>5(2E=PEuSy)YdYR1Bqxj0FdTtNQX+GxTe&(e< z<`V`JR~Gk!DV>&%0eU?MeQiP5aBjH5a8|ie>fm8rw^1lcCEIZ;6^OV0hYd9PB02WY zqTwvsKciPS^4?uLd}3q0AoT^V@o0|?zdJzB+NSWqdu)HBYro03APfH1Hqe69VOMXd z)LW+X{$91-d8Bv5)mtw0@S1j6-ajloY!EiQ$gB%C{fxcL^U2mx*VaYS)=FjTpFvw! z`)pwY&9F6vY<=n4S|x3jDO>*v+A3aY`i0#!*A`vRP9=(*|C$fj@eHa}4Klz$5eKm{gj^K26lQ=3*3xl?4^Zz#b29?!&p% zCYE3OanjByhc+f=(q^E!4Yad?o*v)~!MU_g${3EZ?Gtrw1geHW_n}-&&oren`#_M5 zNl~+pn(SQc4^_r7k$J%WU8-8~E4;+HSCHoNohrZQvan$lGYym}&#} z*}xAr(0h|*V}%Dex8Yp&63STooT76Ci0bE&)b|*+^@W`=W@FQ5&StOAx(nR4Zbw=V zmK>@X!N$>UAljX$0wQkup_bJXd*Ma3MK zbrV1+FCy+;YmN(oSPq^V_{<{Cz`DreA0+duZ(WqE?a-;4Gsao>j z4TCcwC?lZ|?^_=VSrU-hq7keL+46OM1RGsSm`lx zn?|r)qnU9Z0O=hWG}EUv{X7+sf0=3)7dXWRMiEfV=A_Dc8+c3uXbG<&RosKEbrcG+ zD%^viWwlMI6ZwsDoZK`WM=u)%rqz?=g%C!cjZrUUFpaCuN3f-$#;bX-rjkr)z>x15 zea{fVRT#P^v!NR^!*6GRkv$&+_Oj;%s=SbEc)Bi_LF?|q9C@v^QLei;(MPm=vs!)^ zfo-N4t^Y}PCh0bGbuX2=Tcqw*rQ0ZjE?whYK)Q`x-EC5LyHaXmDY^cV-Yn8P$<@0| z>itIPHMR7N4uF*CeYr}KEJ{9uS(<*4QgKrnr;~2 zzGVVmKthdrEYbQ33m9hu+ic(k8wg!#**MJxk{;k(hjUpAa)8E?FMxR2@DigumQ-XI zONbpDOAtzL=)fvJ(?EfedS7LhbdX9i+Hp3uW5R96%Vj%Wq1v&%)s7?aE39OV2P$X-C+SkY@kd7*fY5cgzl^E{5p?HKn_ruGJ0g0p0zwcs-_o+ zMboPl#%TqlgC8*x4NPxD#qvKvi-Um>*DjZS z>b}-urtx*_Ypii7Rg9Ey$0=OSbO2wwskVABtPS+zJP2;b+W`QpZAW^sF%~Edvr<=h zCM%IfkO}N{OBuQ0t&Ht9jPXh*bvGIE?p0&M>H)~ewvp`z=$#<+jRm1mvwo`--PA&) zCTL7G>JmRk1`gXm!L^o3Ya8fi0~2ka%m#Maz+*P>mJNJq z19`hF$6DGzZyOkD0~2jvi4APFf!#Lnf(^WF14nJ3=y#Uuoo!%@4Xm(%D{bHb8+g|S zzOsRW>nuOI*uYd9SZxD4ZQvdoIA8;x*+As?mLJV+V5kj@wSnn2u+9c{+rR@h@SF|2 z;{ncBIG5d+dX9gY@EUclLDze=U|^yR%(8(MHn7D8ZnS~@Ht>oKd}sq-+Cb8@S5` z9_v`$OgXf0OuQ=%R!GuG+GxA*`pR9?h*?3h+^V2toP?&oiEaFK(79=P;RV! z3z2@E#zopqQL9O8#5{#{Qw2#$S$-CC5}TC;kxqRUFvr;Cc*^y16s-(J+}pTv0Z80O zs^sGJ%udF4h|uH6N1$e1lS`YVm2;56u|+ewu&Gz#$;kp@RpejUn^sUOXg(F`I={nNWV!b zwp+pO6F3_TTxCpHKI`X7lsXSUM`j$Epk;Z^twv2#r&ql!Ujjkt#R6PE()SfUZm1Bx zh`_bd^;(AZ{^IRP5Wi3R7M0ZsdwcFl{2AKpiUL9E;p(qb71k1DaxV#h4lYaim zU!Ge(LaVQzr)Sph_|`U_1?``9--Bj=joZ{ z9bfOgjO7tpeR-aqSzbV|7hWGny=M~dgLB_F8GR$n;}Lg``o|)eU>fjl)`i)=Elc@3 zVrM}9LMcyaEakhUCZSK~WrxdepzWvZ)HtXXN0R5@LzG_+ES!BTHW@O;7O3o-M){O( zX88+)QF{&{z{rV+T1miA_-q zPy|xV10Yo|08$+SAUPTU$r~SdXZkOIoPyhelO!HQZ0OGW@*8xkq-kw#B(nf^i>-E_NK9h6qBIGRp;l<{+do>EjS3=00I`IgMk5vYi`wTm;TChjw z@s)Pv*-zoh$n>JgDic8x7tn*IbqaV{qu0|4!w zG4PNLd}sq%do7g?HZax(@C{IZDL2}{0UP+r1{(Z9+4#Nmv=0C~Q`~h$9GxXm;>xW& zLAhIwCueNoVU_U~`NMnCYOC@KKZ4uAKLD{h0}F#ya7ShqEVl*ASXTiV8bD_Gky2+p z0NJUi8O=_G4Oy%8>FLPlAg^4Dq(*wF$tx&r9Rm)(X)koAA+DB=@T?_p|LUu=Mq;jR z##Dz_gS4bvMjSbS+=NiMem0jI0H1>eT{ss*5VOR`T<$n*JEdMac)4@sHt!(^VW4$$YL}P+JS)qSY6VbtW0T|y{toTx6-)Zb$RB^g+x!1Hh zwdxC(-#}2d?Mu|QsL#^@-O9RLa8aYU%`^Pr#R);FY`(}CS73PP0=JBmW9v`wqDLyfu7o?J;gazeBtfIe8RW8d>7DHNNMH0 z3?DWhq%^+4NedJNXSoi}s}!6?ax_;SxKWqVL8F?u8L0t-WT@3UKX;s0qr!-#5St5HJr54>Yf0eZ4bqCgP-w>*w zflg9;I@F$cR(%f|3D2tEj1PWRJ*8UIeO7%uUz_}lrZTQ2JX?#&)>7BjEz;Jl%GR=s zw*G6`k|i9=i2jlh703zG8)+eAq4Z=CRXq6&jEE9VKIbQ&_meO9$rt_P0VXk0o&12; zVv*ExR8)6LaBuK&SD9S@U~$}}GQ=N5hPHUnyZfxOp1Vh9`YIuR3rr@3p(x*dVa&B% zVMV6Pw}?-g4vqs%4$$9e>~W3#TVp?J?0aDTIlTKr%I<$io(|3;VAAdn8r!6?A2oK9 z#(n};(lLdBJ+}hmYp!?sb82MkFnVd{Y}$kBn8I+GTY*upY6a4WI-m@P$_ST5pc^jBGAuVz8C;xOPIxSdZ6-H$qoDO~4Mx~biuzs?=ukhd zLGqFEY_FOx@{#ho_z0JgX~es&vX?2|q)rg$5eLART8xnlpFG$AQ`UGJ-4j^3C4oB%eF09SikWPuMlVF|pS_jvV z&@l#ctO#C2>-n!6-wPnQk0_aius~~}(>1cdMTQ5ERT@!R?TVBgrFFZO!8(F1KdliZ z^Tz=4NdWmafYg1|E~|Y28LSai`go1->KZj&q!C^*0ofiv?hGJrY6RPZypaAxBg)Rt z8c~-WjUQ7!E1B*ZQ8H(1M8#*eMp#C77dc1tz__@K=7>lfb0%h=4oC;;x_I|XC!DH* zaViZrD*$8oB0QEvU&Zgq)3dG}VPiRsSJT|_>QoYlly}Al@~$IM$70jffEAyQf{cDk z69j3Loq|KSjI@&IROT4q`3e`v*YiW0ppq_@z7ifwV!ze!^&;|h zmg{Q|5{Q(ah7b7Bm8fH}+12?<8fD#Z2$zvo^3Q%>dxgt-0xnEq>lSq|y3@$8vsO2T zcUASZ#zs*xcnw7N6fy7m=B++3t?IdmymS`_glF?x%F_K>Qv#EDZlAg%2!q|uM?6w>HxG;8HPh7e<`&xx1!f@ zh*5B@ML+%OuC<2XRHbi)k-mhhwH8wTSFLT&fNr>Kuwi)(S)Po9!C*yr%pG#*vTP7& zYpqpAMA^$Ubdf?CRWV#fO7>a{!@*gAGYkjVad{b$ zH?QH{U4l$Wi}B32`!gTgF;Dol@hk+!9De=KsbHy#d~D&MFY-(M2{y}v#_?FVE8pL5 z3{B2c)=0pzli~Idmuh{312=wHaIO}_ogen2ZTEm5xCewUo?=rSEVVNuw>9`FW@e+# z88km4O{4$wxHS&_6d}X)6`aG%DAOaTZQv2!=$RgAoR2cjM;qs3jPtX-bNLoD8au*b z6Uv}J$3X?<5_dQx({ylN0w(vfsbq3gkj1TOPFl+lx5NgHP~0!Y$S{|0Hw*OZxopT zcgp~y&zy_X0$Y5Xw88}D=K4k-G27d4Wr`^-aBC#xs&x7e}h0^p)vN-h_;JCd(7fuZ9 z^Zse%f`Ls4tg-eY&&nyE5t{3f#bv*v;my5Nz5(a)&nQ6XV7bD13ubc*F)i-~ ziTjW>YqakOJ)*oH3rgle0V^j)_0J5^Dj<=k3b_s%Tu6Q_JJlI)`b?r9V%GkkRlacE zMkzVP9inaOC$f@#fg2OG_yBh~Lv^Tkgv7>8qE%Cz=oFy#or6l2VS^VbFc+s8uia_F zxdVpFZpR^9b{CGxk8m(jg+%Tnk$YI={tP00A+iufM3TrM=z27=19ZpKQyAYX7Wtx{ z8v*_d;fsBE<8&c>w%WVxvsQbf53B}ejKH5$s{>xrAR~ND25Dc%{DSoTiGN>)Qky>K zGygZY)Sj7P>sRNL^q36Ni|{MyChXonS1KD#US*tNsO&OfcUPTxzPcR_*6m3s`g#yT zcUx^=-Tv;@t?2oTuoZtLZ3UWPpEE~-&U8Zwwlh}fa4(RX_Zq)54ExL<4Vu3zgZV}; z_$u{J(n37jny}jh%=4A;r7Jz4DrsLwbdcX=_i{(1m&nBb1??n;J+qflhou+BP*+2T zrI*H3DYu;D&<`QEqB^;YNbUiaqZhzbX^&p)QuZLr(aT*j%F$lV#U%F-%atp+a9J9s zNesDmZB~=?!z^8)q%+le4aq&ia%(L)-1!)V2zz%v)F`MZX6-*t8Gle+gy-3OHJdzNl#`Vz35eFy~aykll#;D84>@8Dd{Y{a5FM(tiS z4}yufJwzYT@`v%kar=wqhpNLm(tY36eMIU$Ds>-Ix*u4&rRfb| zIosfrssjW2Y~Y9uv^=0yoKZNJwIpS0tbPVe-w@*KuwPM!#R%8(C10=q+U>{vOnB?* z{2oWe8&eez=4P6_$~db4UX~f&kpZ?Q97t4MiErFW)H~>_#J4V-$PD+(0PErDW_0U~ z2xb{}GclZO!fE_F*bA3!rqh4pG&vG?e~tA3sa)!*Z1GgKYL!ub6&l>Oc`DnLN^*2i z?lMpAH(G8C%lTt97WFz#tT3KGX4c*v&%dXD`Hj7Md}GL`0WYf}{}VJZT{AOXT&lLS zTH^<@gN(77lwsXSv;w=F!g7!s=?a{>y8`}7?61~?AKjuX4}KyT14idpP`61mjMFO~ zu0$CaFjSwvg!=r4Zl8Y~Jd79n=p$PG1U`7Y_{i$>N_Rc!e(dT#DRrNcy8D&xCmD3x zVZ7Qvx}UnbPfOirl+s@Pw&n=Tw z2l8VR>3-qrz94m9R7!udl>Cj7|EkKFOlk3R=0^Fi+bG8K#%PosD6vG|9Y4b=(;eH% z*UjYXVb|9K($|-iuYb4nq_sgA(ZLzfAsNv#GonK+v=}s^M2UyvzzXN!iuYr+C>%D;MlO@w>UPc*okA~ifeIf zQn3rilPZ3PW7CT3aBNobdmO!82)a9Y0}%e&i#)|f1c2mcytp<}9Qo^_LM^%~Kx9g5?^JGVomexfGM zaS@#x?@YHj;+U*h+H9NSNYet%-zv(8nRLfDVx=1!fo&_R6l^st!&Aa>+%wJPxv&zE z!K*@Vr1(kw)t0K7kGE5KU%KVJCd+$WmG>`8N#=Zoh4R{l=F7{-)>p2r zH>9mMm94KWE%KfGOTNs$Yw}elsf+%N(}vb`N6+#NFdtEW0DK?=jD>2GVTQE3k)u>b znY_w4!|0hGQ`jOf8*k~_{tk#SudyJu^qU871~7~KJ*@q;9Q)9g*Hzsm@~!R(>RTnN1;Lt}lAIVKEO5fi0i z#e`uLxiL_K>-;rPg7;~`EOG*+9W({q1%;CSR7WC%6(-1&PI_ztRB?mQl25TW~Y!Ock$$Pqsh>{IV&ZYGASXeOm% zH50=q^0-}13FiD!#gk`YsP^+CC_e>6N7(J^te-i0%%bRFuM;y;hM@&F;4)<^!&TH* zsaW-8II|nfs@4s@Z5eD0hO2NxsaS3>oY@U#8Mzc3Xy0?w#OuxFgjC@HOT&oefr70; zk>SjaF{@g~-p$-h3|HZuQn9>aII|nfA~!Ce4kYN7m>#457P#08Ew&q%V-l8cb0IBM`!_3*T2z23lQ3Jb){+BHCfLuLd#*= zU3Eohhc#SA8?4FtK|$I|bp>fVHC#r!smTU@L2{AyI?HG`G+ajeo#8Ut?u*ERt>;l%{==GTJx^m(kuxxQw<&;xUrGIVep#A+9v-hTwO;NIILO zZ}Cf0u%7m$Y5ya6t6zkwMq3(XwB->lqiv0F8SQGw=-=j-CWEwz;Y!m+M)LNc2<;v4 z<$Ab`_79Tx@ft_BI9Z`(Zy7C&!)3JeP2%2*xgI4ES`G4YFI+||!sJUqE3|;)RaLl* z7IDc}{35Ghh1O-R2(8Uhhai%Cjpa(mo>dycDwqCh;{Wol9XoaG(y2@5o`hu4_pQZE zg(1;8EkvE7koXo0>DFVHI`bCINs&YpOX&;W1~zW2SiCYU=$2~hA>)RgfzJxiFD5{j zUPup0@n0Cb!xNf6n3K~CJQjEITsp|4MliCt&X@mxMGHHsDdc93_ekS7!C(!xVXV7tG zUpj70(($(_D<+&|VtGt_)rXJ|7#T5=&Swmz*O*${dd9LU>x6Z&e zqO>2K|7j@2@ae{MEF4A0Ela4TKh8OOdR=jEKRP}&GknVSK`&@Iy4X~n71RBcn$D0 zWeB{kUCBxzp6MXHMZOctk5g27bAjh6QQk(j(n1^(Yf!%%E+Ae@@mH4I z*PHZOi^EK{ytq|jv}hy#&5}=D&??af)PIWGEqM70-n znHthVQiV+Ya4u0DL^Gz|UMr~wf+<&4-JA;yUL2vXprJ1UBFhmrfUwUO%xrM49#Y zK*{?eSF(_)TV2T}OvR>4$>vN6c=l{~f}j;#9Wlk#>%i1- zwmDG@WU7SqCW$1S&U@rx{7uEMvKW}3?{xh;=2opnkJ?)ukKVyEnw=Lvn1s( z_0vV``t^b2GN$fXO1wE@1zTCpR^|x$#!?;8=ThR$6u?Mw+q(w8-#Duz7wV_czyM{enKo3hnO1VQlB$*79vQzZ<+eh z<^7wfe3$xxsdg^)BU2Z+djDl=h0FVescT#+6rs{fT*+*v#<{#25vpx$1=V&juQlq3 zO0Mk^(G<(_I^wtG6s0Ai1ydI-lGMpejhiB=E?A$`5f8a~y_olrOATP^s4F>;sZk@O z-kGeol_gVRB=gQ2M7*V922-CR)}!&=h(%1TOiOA>gxc>3wt2Bw6&Kya7$dWBwy^olBe7e;8jH%iS z$m_H?%G3wUTP?n1su%NCi|?3fx`^~D#P>`MAJqw?eg%Fiom%Dbd7UuouMs&>%7S6w z2~dSmYTIw~-^nLlE2j3HN7P!;iK&4DCDo0ocEcrg22;1LlGG@+c?&23y>ZNou9v(C zO#PhuPX5K=wc>oH?z~j;W-zsA9Z~DVeN63wL^*b4QgFwB=yhB|2dhrrdHxDMg_2Ttt1#0_zPT^pp{uHI0A260O{KCP5aBuhsQ~h&^+9ZxLmBZAf;>#%IVAnL2utj{uR?cB7 zTf{d}%GS?U5^t;cH+y#7SfZ{F5$x2}5ffGw4sIi^6t!^Oh#3~tXi&A8cL7Q$5m$-E zOx+1TJA!J$)EJa^DyU{m-9E2yaCcD6nYtgP_X5>|sh?cEmRv%u(RF)_7CXerOw~Mx zsH;UMrj9No>L$^JsR!ed8p2jKxV&M^8#S|Tk3Ntb#nh+F+aty?)r)z1#6+f!%pl2| z#raGXFz*&IovCBsjmFw(7E|xB3Q)l)e-fdz*7UgcoF?D+gal2T;yf|CAU8I=0 zm`mR)Rxm67{(FQx^4ruA7=~>Ld1vzc4RuQisxofqd^ri^=_%8ikKR_Nm5OiTF`Fp1*64&(VVG8V~BcM6vwDF7lIO? z+A!~EspQdKNFA|vFj3Elj!boFzpOV=U6}f2%(C8t#Is@$Qx~5{yywK3Y;*doWxa)X zUW{aF7bJ-~ndQBW=YSCiiy)L?D(^z+R52D@_ zr)5)~wO%%IaUW2_u%%H)oHu_JcyEc3+0@eO#!G4xQ>QFlwfGV6#xiwq&Z@|Y zrtVL#f|WzUVd{qx(tBSlXX??ji27J;WNO6*qCOSB=hA{9F3-M2JFI)LLm+(*V2=i*rmc0E;z2-_j&D6hL>LsRbh1X=|WiH_n zSm^`mb*_5?Rz{1j#2Z|~xaE?1lc_{^NgZP9Aea7?_<;4s&!)MSp!w<4zowMx@&~GQcalp7uLYI?hiF( z>O!o<`iQ(xb3-pb)Y8za8*0PUPS&d*iq}|+5@wxDdWE49=HXc&P(`6m2GuBZDpUVr zUXxH)rp{w4%|hKJkEs@+9!yDJT7`Ns^$dGf96Ft;)|l7(h_<1=Or6bCNvMAf+Vv}% zEU-7xAympd=}U*u`An_mx_1suGk9G>GYsBop;-p6XJ`)Fymcno>=l~FJXw0L(1jf9 zUG2!1zM-TcIUtl`Nm;)Ep^FWh14C)1q%UWN)-fgHa#m=)VP#loBU69JuHa}fEOaST ziyTQ^U8551y1N?=Vr*!qp*J>kEmKdj-q_G}OdU&--q_IfHNt3venSN2yRo54!?OvX zh<6V2CWdY@cvC@9ba!Fbb+nisx|ykSnVJ#0ovDSJh&MBImr?W6wUqdw;HWE(l5FQjLj zgG)n)nUXoUJamL9nM)UijvCae(3b{vap)_9S{?evpw@)Gs}Vs2zw9osTd*$lJ@=fi z&!E~~68f2W?=o+F=ojXFzLIzwLg5^WysYiUP_~b%lS4gRdbTlC$dt^bOG6ErlJ(mb zYAktNzso`=8CEV2HS>86 zLu;7&7S|xPKy7Af{(2$mg4)3pe$*8^m3u=sGc~j??hJr>fT=y`RYX0;R30dj+|Sg% zHcRS7rcN72wcQ(f)$n?6=q;vX+uj*^+o;3cp?4&Y+xEWDyN2F_p+kn=Bcb;V-s7PU z4c?QXkC~Ejc{=o|A^B|RGeh!)&=&@EAavNE4u*~x)GMK*2K8F#OG&YxZ-ltCq zW8;pO;P~mP&EU3LzO`OU@l@AvUQ4mC>kepzx`p#hYhA>idcTD{l~O3KZ}&T#k6|Co zBXL9G-QG9&xGlvEvu~@{oprm58IT!YQP_M3jz2e|OLdpr;L($RnB^a~~#>zB80OfB9rO9&AO&{k7=07Ihh4F{LFPD{Is7u>v|~71Qx9 z#^2{!AFD&iAV$80C*vzRvHTf)Y{bX+S!NfPG7F{1I24HO@UT$yjPJm4B97xL26O3C zxU9pd(fEpS?8&M1N#^5*bSy==g(4p{Efmum(6P9Pj^&6(q3Bi1i?AK-Lh*R6TueP9aKgUtF(fEq@ni28^AK&8R6MVd+Dd88krQ;et zE{8vqCvPIoltpy@9v?q+v#x+~c?^jO>)yx>i5t%QAlJ+X(ppyUWE=+|ljDnq=E-v< zv*~ozN2taBin6XOq+`>1bc{6ntFH%13o_a&=8IQS#Ik14aV{Tk<>O{PcH`p@(}}y2 z&x`puh>vyoIFXO5a5OCk&k<+N!_3D*HyR$dGxx`k7O!Boh*kpK=f}F~4qArC zMw(sN7SDvVyyyj-PpV1BF?kDdoO*r&c*nd`a2&C;D~?~U3FoQvspr%AiCO3Y-2;=! z^2g`Xd_nakJAHtU!n{N0r8vLo+}VtK=a2Rs0$g%`Kg^Rn*xNgoo|ux~Bs@FvT*^p0 zCL;YGv2++pX?f9T93QJe$5{J`ICjjNf}@g|iSw2h&BgJt8gz`cUxH)DyyZAnjxED+ z#L{&*-adH~jyFs`h`LZDDgKw&FBDyBE<>wbRfA$aV(Hb8+17sz&XxULK&ozq8^EPf z%-kpxPc@`mD(8%Ppe>y*;jFuc&o|&a7F*7v`m#EE>W{A|ZcWDU%QxgFB-R9q%ooV{vOb-iULOe+0*WO%LbE7Br8<{UH}MT1V}oTIvbNM>$VMES&{> z^u;T$1nDQf*o&?=Zlh*LO)3O0s zZo|h!gF>+n^ID-eig~6 zvd$?Eqg&u&L~Lkyb@E*7#!Y7G`J9K=Ueq8gW*WS(SR|<$l~XTj5E07_UPP>6>i=Tz zz5}8-{>Jgo?9QBr6${4+0tZq>#D=1XqFAwu$k{dajvWM*q6lJQ#}cC$dr3^x7&Xyo zjA+zYVvic5F_sit6uW-kGxKISo;;tY{hr@{kAIx^y7%nNduC^M@AmeVTynJWR2N28 zNX@sd7?a_`$tMmaIoYjbp4B)JvN@oZGlyl)0-Zy7N>%VC@K4oZB0*9rPZOzYXpTz> z5~pM?pO)xiCcTx&&AUxQ(ZhrE~MPgf4F#&1E`iW9=X^^^Qx-#py7{T&L*PX%y{GC zL;gf<>fmIlN&RRL*7eA7Y+A*V|#huxQJy7v&KCm<(DX4Q9i!2djCF;HY z%Po=Q04iWgo}~%QJ<(n!=^MY^(v&bb7bi4g+Ez<6@kf2uVY{UTX^jeNyxY=>3`a$E z*l%e=W+};Svn^R*XpT!evQcUwS=9GCOM4OyR}n)0$hMiMEFH)RsfA?R?CX|T(yO|N zEhOo)?^(K%(jh{*WM$tcmN=4PsI+T5`BO@a3nksjYbCOIu&--(Vyz*T%OouZhr0G4 zby41lc2iF>61Am;-PDV$mC7ZH8Z~t7O=zfCPK|tjQb8)$>{O$TYky)xg(nFGpxP$2 z2i25HBlRLF{0;9psN2~>yHQVC3RS5oTF50ngECy+BQsEMg1WfAM@TIdYZTeVbpRPG zrTRCJjFD2A4J0#-m@`}%Hcu)8MuNlDldBEcO@qmHCG+E6i7rFPUbURLa>Gb%2>BM} z+vqjuXVkg~A!l*fCGKg5kU*)K(843QHl?l9VW$RD5?zLqSXApNcGGauOO+(k;_}D{ zl3?f&+@pOa>UoIWbqx6cRi{HA*95W&wJUCr>o~Fxl|O5w>jZKMb$dh}-1*T|M`SjW zeBZv0Ya*$S`eVif*D0h6>i1b`t|?@cR4z%IoZ~u;Oh@IlUEn&MxrmhZ5_Wj1Mz ziilt0l0*8TDmLEiI)}_dE$Fb#^?mXUYUQk*t{;#KD09kQ*SX|xL(XI#ae;Gqgxsbl zv%hnlPeM>b;wXH-AEo5v9&yZd0qKpg9&x8!7m^7mR`U`l3ss}R3YUfC0IFKYYp#pP zkB07m?n|lBT})m`<gB`&$d8P1Txcb>F8^lu3XKy8OUEG1DWU+C>Jl7Lzby@H0-Eoi@>pUYS#(K3OG1ea&66spK}U8_0PnHG4LYpQY67*+3o`F}rC4 zd8w8&uXcItx{;KI>kq^%zZ6~oijc}QcdHddHBWO%J(5F3s#&=)l7~{c=J-mk)=vl(myeTN z^KhvOsHRfBN|3cXl#G?iGo??2m5UsSgXEc#`CjmA?OS4obNw)$=9SSxl~HFyB0=yc0c0%BQ^X>qR3E-2 z?NkivjIn-81}c%VjqIjFWSJ4Oo4zA!mCOx;gXm$h%OQ4{9F&6h(9`0q`Q#TV)j~db zPSd*Rh*^AgxhhV@6p|k{PJ=F!HC#*QmC&CtA;t=cqqMPqdyT zbt7e-=B0yDtmjFb5_uSrVZA^mVQh282iA*ZF=}D_W7mshi_pCQaBh;!8p?;`M@j^3Dm6`}`M5Xr^ zI)NgcgzihJ{@oxiRZOmj8-zEL?ZN1ls(h2UDv=-4%Y#BORx&Y&{z{rE$>n|}?XV<| zw^qJIj-s5Z1y#OHc(m$6TF)}p+r$;MdZthi>Up=iP%;AbLDwdr_EIX(+oX?*$@XrO zVM_4HJErm-lI#$>LozXTIk{BjyJV>n2@UHAdLxzZRI%=B?FlK@Tx6E-G$kn#a!6%c=v=urV_h7x%ekgh1Pjtar2mFk0-1qH-Q31&eCv``CUVir6j ztx;k@3*`pmew+BdMVx+u1TsPrM9s*q=}T+?{294hP;Q$OZ%+y zTQXG%_6++fzatAVHf7u)&<-h83!&dhsU8t}N=of_DZPOb`&~-^Mv46{rRFvwGgS+v zgQQd~lqMLWaDCJaL#HcibgdHXcQ01f>1oto4TN5!hTDY#;mUEbHytqJ8c19@4!`vy z3DLh-W^^9L>Q4N-GN)gou6Ml%x{F#BB2=lZs%2BWP!y_C6QPl)_(Y+lsPz6q-%6?e zae7k4_5$P14`^a&2$gyc{dj*d0a}hV5V19 z3|gSXOdlGuK}lPC(L%n{`L@@rvSH7bdHp2p)_48CDsuo zrRnNou}enGZYoWGmC7}T&Z*&6hH4!|>$&FVGljgB2ulkGHJ4H?l%;V}s)e$2m?39U zmd-L{HWY8 zr1G7dgI;SDsW<9y3!yqF4bE~@q%BZSI*3@jl&Ym7eb1p}B{~5m_NJ9+mK3~GogVF0 ziC&OWeXm6Sl2Wx)qR*AgQV}MoHavx|`M8 z%}Ph23Th7ptyQ88`;G@)LWQ?XbE`~CcNQ(&rhNQdH#ZuEYEW;kn>(F=npFQIw<>f4 zs(#uQHxGIURcg*2H&1#UH7)Ikn-?vR$}~@I6RFwgTU1&bPHeP97tx-`niFqYMM{l? z4;2xZtz|?XiX{4Ah>JcHN%Wy=;c{H`!Pk)JgP$SM2Y*AN4*`Zm9|8@DJ_OMWBTr{i zjjoV_y<7F=)?oT6YI27l8cYwM?!h(|On*d)Z7i7HLUjxgDnNY>$DCklj+MQ2+S*jq z>4uuzDiUJVQHeD~$;K!#uY+kPRL$n1N5qz*uES9+m~KYZ z=_m9xYM;#IBr08&`~~$kN3{1CHNTE%fpt}V2p=m1Ct1b%bMnX#3Pde!Dbx_PH%-*i z4n^Au^+Ej!+e$D^K<$u9N7>-`7fctSHuV-I*Q0Lq5q;Q=`mMHz9YbA%_k6+hDk@*< zKI*m{CHV)oAnSm-Vr^E4Q+;?MOZuWZg^60~p~OBUn6^e`%Qe;m^+1l7nv9h=MsE_1Yxr7=jW51)s{w0{cmJ(YP+~MMrD^`@8h)PKonx!P$t4`+?(^{!~Cogyh zSe@=dg~4a->hvsXbMz^<5c)f6cl3Es>G-0oYfv~T5C8I=MAo4+2qm%(r4cC6LMWWI zQzehhxat;42cqt`5K2Lno^cEG1m!PFma?nmW=i=;sWA(sAs7?eZB5z)C9SMw2_-%))udTcYG&1> zD=?-;Vh2jBznb(sYFWZnw_5a1)W(GSAg3N8Pc^!=X(cJOZtGBglvuZQXgKQPjAw3j zXh&l?O6t%77!!NNI&>oH{Tj{?TYwUo)uo$IBD1>mI7+O|FnSHuJH#2Tb$N-JKKiv* zkCyJK#&iB?XHt&_NvW*s)4CWFGcugEM2W1!sU6i1-a&-Z;V9ZtC`C$*U^tzJF_B9+ z{TL;338&wnL?0T^3nM^ zfJSsEDl^BKG@>(6Vn#;NC8#S|@XKMk6O{;`vKrHT)U2+~aAp0ksAJIgCiE%lS_fy+ zgjVP+*R)xzqbTZ&66+|6HkHbE5@X$z#-hYnH>C+u>YYF{nxmG3{fphyjOJoVG4j!L zBT9^XG~J5|45IGQ^bG1EymyPHze=f*kEYKsHa%L@;?zftU{*9I(bOL`0@g}%8jebb zwbGo%NvX_Q&;e3vPPCw-4V7?jNoOgMI&&y#Mb{cJyQvl3CZ*1NwWbGABA3?mEJ}QW zZcTqf4T7UuYx)c|v6GNfUzPRyQtqhlCW%@?P-iBIl1)%;MwfAKO*^B);8@j~4nQrC z%S}YBk;~0Ooq=OcYr0HI^|m!#D|MTO&#dU)hVDdltmft3mYVyC%x+V^nSP*FsMDES zE$wIms^io!_YQOeYVV}2mQM6EDgt6%Xo>y={@tckIy#fC)E5;z^_6QJjY8$Nbtc_t zZUeq?&I=a&nC^wh|-RaLL zadxCTeJG_`=uTf@>}7V8dk6L2^HH`=yxUhrp+*r^8huT z-Df7d52T$?SJQIb2hm$7J#Llz2>J?@Hes{-NLpc_S}twEZue2NwxJ{LV`vvc=iJBA zVW{BQzqpU1sVGa#U+&}S5|laSh5H1$%TTE*lj#pqYFrZO&r)i16X`uEwXG!4SEyI8 z{*q{!L29g@!u(94UZ}~5LbXs6`&O=!M5C2xLDwLfMB^|fwyGpL1SPhPB$|XW&Gvxh za!_ImNTMGpQ5QHGCedwDD$gXkSII2uoI+2ao;IyoWeUB6nw%)44Hj8vn(uavsXT>N zLfwKh@>8h4lp2XCw5f{8J>L}CPU<#I&!i-o_C+m_8s|_lnNC$Q*NO?Ql0xUAHo}Zd zp{tchw2bX=ST2R`m&$h<250i8($lDQumwz|H&Fv&Z!?uXLG6b1FqN8ysP!O5a4Pjc zO>VQ?I+cc^a@vTJO;IHp2hpiCR!WWFRN7DKHf=YvR+VWq4|OP^X_e`;044SzY1Ct= z96>oQ88lGI96Y{ql^L`l>Z2x++6>wbWf>>b2W65P;UD@crRvP0U5%LCltueW0(q69ILYF22?D} zkZigKwNdIgYQC)V8fqxK8_lKN2|k;IYY^TLu` z96Pof68ohchQvOrNMdx0B)0c2jFMt|hZ_iDW@7t;y9Z(}VwS`00x>3Ld6C2{hx-R& zNikoFB<71Dekz&5or4NXiaLulYV=VD1%x=n_}e~bi(pI@rLoeEWZJU;!;DsXE; zRCMCLD&H9DI`DawgNBxkujpPRH<)#Yj9CA)5+07K=yBMHJsRifk?)`y9>)!JYZ2*j z%0b&LKN_M_n|qvdP#2GjhGr)9bH8k8MN(gnA~k3+%;P5`)^7GBkE;&K^tfi|>bQj- z*A49(SHt6$gFHR%(v5Qa%O#o9*LeIze?c`!-2}3X6oaPrM1Ro$DYfQ%NJJ2QOb4TSNF`#)Z{cjk zV>%mkevHrxlz5N%n0|^9-#a~~2T?Qn#JNw(^wDK#6VTDa}=)V(WNH zccR3WQ$X*a#MbeQ@-ZT_+f-~hFK8Vp)xv8UC6!Obmh*;AbBMj6*(&C=2EHGAOFu;2 zg?B7(=_jbOko8;o4Qext(p!2)O11EoUd7mBSkv$5eN+`#x9=$2#tHuAJ6(Ym-q8xE z#_&DmJL-$Nleo|09gUDub-tsmrEXKPg%fQpN^IepR)7*)m8Mz7s=kXYhiS1WvE?{v znT9+)%4mmBV$V=P`_)iIk4oBWl-M?1w1{!4&UUjiJuF&Jl-R-W}Ppu`@g?8HyTwmyf)aa_0BwMwE*{mi3@No0SJxIvsd1^Ut&+-j zN{3HiA=>9C|L&2XL#Pz^j2@z$M~&~Y+!~_YK@Dpm^a5pv_n0ACsR<&pd?zRPjy6Q| zK<$S07ovrtPD?dK-GWcFAzCczVqa0`ASsn+h?bya4sUP#CAR6BS|42Qhm?yRHMJ=Y%hl3mVytl+Us_vRg4)yn zXOG(2Ce)Sww?JPxELU60ml9V2|L##oyNV@m!S@e!wR;XF>uOIN6sEm%P(7{WB-Ou{ zW1o1`*QzMV9@Wv#lon2)oGa)tGot1=KQ_yX`bz)T)pe&vse_$_#tx z_F8*XrKlLs_S!(y(6) kfZPgtq-WJ7^0~<>1?vj@nw3d-E92j@nl!ZQxb6PTG&C z3Im6DcGB*l4vin<*;#vq`f+?BsKOML^)T4mbkTfKQ=7(kcF`hG)4MOX#%k?R3%mF8 zjMavrjzg@gmW;Xpv98(@)Q#@1wK#1P>hJC`o^jd%R4w?nrJMF6DmpgCvzvAgH6eM1 zXS~LeRc3>t-}mgUSx_EvLA1LThzgC1hFC+?Mc51X(AuFslxW zgX%qMp=U2`4QlJC6`sAdFHrj+)>}J)>d+&I_R)Sujpz~W*++YcS_-kgTIm#(^$v*j z)dEp##;ow{r!_=U<(Z(JFI4U2)&%X2R3yx!Tg@V>6YsXRTTRD48 z)~+c*dlt|WCGsTHZc5aGrWcMNB}rPO5)u25B&{Q=dya=!k~SDs6}G=AS|X};QxC5x z+FaC^^@3=!wi>msp08K3wh#3#{k4{&okEq(@bF5}ZlgNEd&Q~Rb5y_T9$r(ma;Y*i z;so2@G|e035$oYKO$$d&NDlUzuEnATMX&Ho(}qfkE4k`=rD-3i81$WzG;N8LS`TU3 zMk8i7rD;2)Zqu7RkGZC6r&0Ov9ZH6F*HA;R8JbfXfq%DY%k2G@OwG^GdP|np($H?p zY;B04Jj)y{%g|QK2ihh>+b#37V<;#1hGT(t69uOx$wKWdszPtOX`!(Nh&&e=5+xTK z615abosqwT$0l^!)1fk6m=;)%4>rbuS$}w&0B)Tpfbj{_u8msqMAgHc1uwR}{S z=mf8=+RvzvXt;B?R)9*0b%y)omd%j4klCPZnm=ko_GGWmw5F)J*_*0t*J7pA4B4&? zR57`i+OCZ;1ZPgP`AX(~4I;HKv^6O49oQGz7pP_MYpXA`BgS%e(-+#0hSI%uX@4jY z|9074Uuthq`5ALTm1n4|^D|a@?bd3dR<>H{wMT1ZXs*{@Z2;=@?9E6h0m>!ky4O+7Wu|I~DSw;^xa8Eu-9xgNY{IH%1+wVG4ic24^kl{Kd}Xr~hVt}BS1)ACU!n62lun^ux?I*)pnN*pO_w#%nm7W9*iVK;>?du5szvT!u4rEwvYW1G`AYIv zVOOE=xLkYHLT2DiXwiobsdkaerwY}0lG_=C@M*GUpTH8DAilI~+)e8(Qvgx{I zc3~~EZCtNqsGqHb-VQY}eyGh!A8BZXt&~2;klj{B-)d;Bt(<&rqt(Tfbx|(N#fwO+Z;Y+Ha{!_Zn=klw-23R|!~8dU>Y579p`WVeOtpBhTA)zVKIO10I| z?-@$8h3QW3tM+QZT&l188k%iupf@qJ))t}nHMGJOsZU3x#jmh6(N`Htur<}cF_dVF z)~_4tXKSIqG?Z#st(c zVT;xC4ehtZ={F1=vBm4J4V|`i*Wm}2@Gp~C<1gEK>a`8svh~*68+u^ts}D8w+}2;u zKt1W$&o)3`iMrP@)iy}qgZc$DL_cS!pKX}_0F^VbpKXL*a-M2EXJV>tlD>kT=3Pt?DaQb)>3`dJl|`@u>29Yc20 zB>gci=QciwPS)9cmDv_}uQ*w^pw1<_dQa8^Q3s_OqP9u3L)C0a$z;8+lH9vZ)`w&4 zT%w0}qMm{}DD?qqn^c~|a*6sDjLnRJcfb06hgg#Sy^=W=J~vL$ub_r?54TOxpQARw znW1F89Ylx}Imm;GL?z z(~vXh2Q1kMuJudTucIa;!<|y~XQUn4AWf!W^O@enNGjyAhY<-4a*N`)rp?5MA z={-~5YN(ZWj{eF}xNV+Zd6BFWYU$)XUvFc`Zd#;wmAdV;qg4=HtPe)j=_Ztj`UK8^ zEY?LGa1cTu^Rw^V=Zx=bJH zkjpYXNlKir>*c*npC^?G_Ybn0mg|R=AXZT7L;V)U#Qh6C(tUG9|HQlI+~C_`*7BFo&GmUtd(^-Un<)(H-qvXG>%6gqXRK*}q_-vt%Hw3?t z)@Lb^zHn!Z_4+2%HMldzM*TQyINTXyv;G&VCfpfgt6pxI>fdmpweakABY(eA}tN!R5pqJof5d%T?>* z4jy0YO;O?w9{cqHC~*gm1NuyqxP!;H`UaG^gU5IJ_b71(k9_?Pl(>V(QN7HEss(We zk7If@C7I_5y{UtK(A!Dno5l8UQtzh(ciTwPPU?#sN}keJIq0;$%Ry)KU!=sG?@{7M z{fU&S^PKLxLgbP!>pZ9TlTvf=ygouod}5#JeL+uCF;X%<2ecG*E_<2xMSU}B^(eR( zqrR_DaJ9ij{WMA+y%tK|MCFd!40>T`xA!I8`6D$h3+m;2U)Dnno%Oz|$4aSL_lrJI z#pIa%qL0Cn%LhbiH}n|}C2#0!SIRnN$s77MB{DiGh~Cr>Dw)M^^=|5CQR3HfH}&68 z9pTEOoBA`9`0n$j?zBqQY5plr$Q|_^oGZDhhbWPm_8Zitl0v445r z(o<0P8o%)VO<#yQ+tuWATmRHh1)sb652)_Z`QCr%e;V@kxvx9tsWIzUua?hay{?kE zQcd{PqTUjfS4YT>CBF}B?DJF~t|Z6hsXoyVB?WpmE_WNwC>7`*qC%SqePWcfn+o*Z zhA8}XkP}!kwjTVBPyZP;41SsTOn)eqOUBe|Muv}?2+hMuV>_eku zl22*2%TTIM8TOOIa^={s4$GBePmCD+o{POR1i$BE71tDIo#f-pY8XoODbKn{sXkO> zJ*8A1DzcGA%xz} zULady#O$U(_OYRzK0)lLl38rGA?zn5G6~ju2rDp3+D$bWT_a)L%nB7#Ly;UNwMy>S@XU^*jvxaX2nY)r%+(DoL3qf5BTW)Q@nnD~y=k6v;Li+HYyhzEd)Hg{>-zT|iZW?LCU!HA>n|QS5I+U;8v= zo*P8gx#pj$xLTXDP*j_WLQztg=EZQOMRV2#wW1wdU(N=iqTx!C=4_Ib%Ck9}C8he; zoUJ#M>eG@PQ_IQzwPt4>mTS#!8715Jv}XE7nHj9xRG%0YAf@I+J62Olwbza{HDY#C zJJwDuXPz2<$frGfPsPluB7Bz33 zh7CFA(}}%AT^;hhPiN-3Nv?O|(~*)ctQu-?rcflRPS0O`y0A{D(u15yEE_7N`p}gn zsThpQ?>=2w9+vFc#cqmcmr&zo*-dulyjitZ0^ZkkXDyUqx$k{?uwED&+DNb3lg)RC z^=2C}ChF|Nt{Jg&K7H8}jIB&8U9}&pxka`h>wJ&3RwAPH0c@&6Y#>{NF_Ft4_Pr5< zJ8iLZN^rN7<<=qWHYz{brRos&9Q8i@4r~Z3xmC7jo)1?m4`EeMzrk+{+$yP?m}+>n=1OwWp%c$EfLELOW1F z7NPH?)H)i<&P$0oXg3XIzhKGSDnV6;u}7#wHX-d3(Id6oFji4YEjNsLO68ir_6w~# zoQ0yIDhfrRKD7vSMs2qVy(gvW9L~mL>~*s+h%G?fYZd|e9CfH!Q_yK8(!EzJ(BBwq z)%~&S2V%!J1>qso~wKj$}Pl%v=-h+%l4lL`7sf zlaXwOl&WPETa3%S^l`P0V(U>^7NIXuDK?>_D66~BWz^MjLcgOXc?-QlZLcg;dYkIQ zQ(4jj)lIZ78%@8tTsi<%+Zdx3f`dt35z z)uZEbJ-DMP!7*nPtBy*Q{fk63kg*O@g>y;NA>PeQ3+q*N6f0EnOlLC2(5eReEeVFc zO4(`|$NI`z#7rJobpo4e$Znd*vXn^Eh!IsMu{EgL5oN52>EHUDV^MLNBCL)>Bx??IKgP9Zg|yLoFe5@A2*2lUaaNE{PqVRyCP5!`QkC z%dIJ_D{4OczAA+cmQr=5u*oV0J<6_{V)XWAoq1KK8amx_Y1Qd$u~8Dfv1NHux#s0% zT&?Nsa}^`+56r8Y&VE3Z2-;FLgWWZ>r|L|m?+{t5)@QLwQmRL@n3s|{6~0H$Vzp3B zVXvRXqES1NBDE|QhiX1v#D*xzy=fL3CzWd+3EN6G%RmjUAhZZo2eztgwhrYcwF}io z>IiD6)Fr7*^TCerivadJO8j0eo4r;g$()wQt7bFToocOcxT<9~3qsw8>xpKw2-MVY zq4ubz@JrU&tS@TK=yO$Pv$3drsSH$W_zXLnt(8(EIGcT;VxsS^v)OSaasWP+=dc@6 zY4F!vgdP@^H07{YQn}{-zL%=bVWq!NS@-MwGsqKFXV5KBO;kkI@1SN49N|B z2r*HI*s8{XJ}@*X>}Az?h9=B>S#`dl)1h!rLl&!Akn3+D>m!wGJ^}lzMQjWz6V}5b zmWm22|JZdAn~!Q+LFi*tmedZZO!IX3jIf9uMy-J}UyIm9)Qhxs?u*zxlvodo*efa3 zzeTL{F3}@3KNm4qB~mSo`YvX5P}^sg^j*SY47vI)WrI+kbPn)c&QegFlI!|@$QBxE z>brt{irNIVtYn8#TVT0W>?*1QESJarR)SIL?7Nzk{!(T}Hig#k{+P8!%>b=sGf>mQ z?56eXYgF<~xEmpRq$J0BBYUl6zBw^c+r-N5F6!+jR#__7OnvOWn^`p}H7=W3ghR>A ztR(vVP|alQBlWs!B)5*OEJR9e9a~wWqLQYqtd)|vU+00opRn#I zu?2j>Mi?cBLu`f;5i|Kyw#SH3vW@*9m20jSFy40?`xzB0^#Em+f1I8Tib+gWW*Ao)ScNu)iIa+ri#qOq>(n$(+A3M&7iO zxhoOR(U%BpP!%@|f7y0gCAD{+xSmXOO`x50F|Ap@Xb_Lb7 z10{#peN;l65dB)VPTb>#Dk;e^JH!H&%vSjR=n!j&3Y#n>mJ)lgQ62Mri?nL$N#Dap ztW+Ima>S5$2XWMpcn5KewKLkYn~t-1DRF$i;Cq4%MP+#jC84-YXttDE(gQ>%)`mLZRRa;gjsHL&=luZ;Xlcev0vZqJL_Cc8WPm<(dP$9=o1q z-l)NTLbXwEq@qzLWy!9nuKuFrAk_C&geIXrlO<=Nx_gM&Qq*3H&?eMjZ=t=YzvXhr zQQO@`>?-PKslQOGrQV|I%NEM*7yX0JYBDn$Dps~v3l(D%bv8p)lZr)6k-Z&=`mwSo zIT3ZwS11$Z?yG`awJ}(O3LNR98f)4UP+YnM13F?ikj~uVo|76sm@Yr>p0EclTtJJ zG#iB_&qFO|*fbP@_Rg@mC_PXp4`qXQ31`^ns4%!U?-}+j>O+_>XV_U(x~%0Es=BP@ zDJmO!dxn_~68M*E4wSXHqH^Fp${7}jIsvob3~PXTEnA2|je<3HhV?|bz*wJQBT*sH z_cLrNYJkk;1C%R_{28_i^{Z^}Gt@!3+(Fb58T%2X$vl5Wy@0uNhCM-zfUWopg`R?Cv%s83~PZBTb%n?A#Opqjw8a)ymS9fmFZ3`;>(lDWK(S}*&) z5|t?H+=iMATjLpa0Cil(&Y+lFn>SHUWY&M9=E?rCL#jtdWy}S2QI3m0YB6j_XIOpI z0J)A@qt447bw}NkSr13mkgX@9#>xK8K|Pf%e1r;ut?CT>6!k*Z@(rq!)M-?@%=!lE zFPYh6)GI0dJJq9&a!pr4nPt{~s3@6PJ=7PnWGhrRIqU4GO0wiIl!vTk3MxjfzZ{fV z&bk$-?`77Xp!P`ZM|sQkPN6Q#*e|G1x&9uZuF9=LJFI$CQqHW3C}+9F`Jz_JI>S&t zGS*T`?HSIncqy@GfWKqKMyitV{pPQ}XV^A}l0UM1qom#RBRiu+!r|`QXW0YPL%8bk z94nJAGRq|5+TQcbAH|#Ow_IS+sJC#}y-TbY>iEQP+hsNd)v;%|?I*SrRb|e8%N4e- zFqU4|dX4>rdIq;%yUre>GRiNma-CH;qFRqi7cqZSW2r`{hhzWnz0QWB@-p^Yeql3F z(P7TyCR>SGJNBvXuk1^d5A^mHJFjGRf@=YOV|S!-$$<_TF2AvNhNiRMnDh{nC>1k{yPe);(@|~4mhijFa#7-MC){N#Q2`A( zxyv>v$+dZpeTK0wYnSu8$L^wzfPQDT@8u|&_ttXv`-9n0$3TCwd8o4e%K81pj-tFk z_Zj^0ZTOdIE(x_fVBsh?&_kAhx?7{1-y^mW^&Iq={etqZSI-z)v za(+))7OFC+fbCO~J$lAYD3PCP!?&yKHR@U|4r+Ho)=BQPf%}`X6jTV5e9pF_N`(qt zMYXLdRQdn_jYNhU)meVr`YoLqEdjDiJ<33bY*M zJQTiz=4(;@QlCks5iK~%kMe4#)abfHOyf~fY2;irp^>Nx!9t6ra?S0_wDQyVdepJf zLSLfV5TT=}DrJQ(qx#9%@2EB9MeG#{?x_SSeOly_Yo09SfvP1{12x}Ilx%{kEMuLN zh*#V85KBavK|0SvMS>VVDy80Maeh|GygfNmGx6V0U&2{26Mu%fkttN+j2tENd8rUo zV%s2U;!RMCV}v@Ru1gJ&QuD>cC#V?ACA-PQr%UD2yYSavO7I0rPM;4VekJ%e)Vi3i zerA3UwJW9v=rT&oB`5v|>W6kg)QP`QqI0W7`8jcyA4S&rbOBuFSds^#Ha8QBP;%XYO7K@CGF(dY9786(G~b3L!{Hm1 zGW;;cUZk4zGW>>=YOgF8^^4D`r(j=Dq#t3gQKW0I*C=O{^nsE^BCyveQWMx~6v-R* z8s+$7*`7LzmgD8liS{zhVyw&Y>L{_LI`ihJuWAI*^1K^LjBa^8REdbuEzi?X$Ke~z z3Vbn^yfJ9BUj-x24v<+zL*bzl{fe|0`cTP;#nj*q`n@kD@JGhvzkHrw!%=r@ISOv1 z=TNdwF^M{hYOz2r7NbtldXYZP&m>6RKC;mo*8~_+#l7xrBFC3ubNN{Y8`xY?#6qe7QipY-1unJWw?W}8&5_3l`6DA ziLM`z1GTJ`Qrol}-=-wbCAjm0sL+f^&7Gf>$|bYI=li+y#}3Q6^EZZ^NfqvSLG%dj z8(MFPp9imr5_7_XH&=pf>?4S!pdJNn@w4$`h06_2@$=?)F?Kw2r=JhET$FXvprV-p`*OL5b}> zkpGGj+j}5?hs#Zd{Zb$=f2lAR5%ZN&>o$;wNr~|s?H9<~DUs+pNsM(3 zejg>q8oKzC%v#R!8oZPe$*p$DFO)ZMh}GuJF*d%&CBHhnwUip&dOWX~o);6lQrH3| z^>`Vn4AMbwP3v(tDOF2-?(a~tJ`cr`$#DO_`n-`t$#CAt2bneEjjpL&?2uU`pNQ%YnKkA!P|wXb{2KFpQYy11 zJRf6sp=1;OOR?BJjO9Y>P53*hT=RR@Hm*&$^UtEaTyrh!9ls{r8x?E)15_K;49=W1 z;nAoG)&~&lDy7y~6Fx|)FqhF%86-@$_kOWhF2-~ir6zn=vDi1oV!suO-N#sjT(07E zk#%8vRirY=Ph8a5v{)<#V`{mH#bVPic3RfCvRG^b#>%aS8dP7_4Qsi=o=ABiYF z7j+Omt3~nEsLU{-9jGmBg$|>>hP#$V@r$TEJ%#R}NN1r}sEV*Jh~i~#5crqxv;cl@ zAH}^;;%_QN@mi?W$w4%VN2BJ23B{p&;CBU4di^W!8Ow`hh|AGp1df^w%-F_8ys#==!s!|z5)Y61jV7o%pBq0mk&X`YB?5^ZYbHmKVOYH zRd1I6K>oFoJfaWgN2PMf^tk!{LwNOjqIETUhH&v*d_s8ySFH}=2V_jmr6K&Bq2;h# zff9^_*>e~-|1OpjCGDnRyrLnvs{{`)1b+{c*EU4S2;NeOILEE?AHjPLSLQW<0n z>~}}<)MBx0jLnp>jYiCF8p(GUqGS|5B9&|AWk2;F#V<*z-j3q;jFNB{3;x6qC8N3d z57DDs^TmLj{-b$i)ZL0g)udD{qj`js>icNk(h!Brd*E^x1NQol;UiFYD+;AZsanSH z_lqsJR4RiIv#6!tpM|3EB?v63M#MbP5%@gj{0TH75}NcBWmub zd;Zh-2vktmL;vY~s*=oQI?pmhNh)7~B}qhqe=6UBTF}41KaC$lW!5Y3Pv!EN z7N1}U?zPIZuw?5<=YTA}3e~D><$!Gd6)Gsq7BHLtfcmy)Wzan(=sR4$#2-s#kgG6T zb9niOg;@)^NoA1MFw1jzgJQ8}81sjjoWuJUiw(zEXIW=NMy>{sZc}kcfa4{1&QX{fK~%_$$<{@Q8qw zyuy>hk++*xaSub3O4jn; zO0o}Y`54sWi30-G@*JZi{9=>m8iHSJ^34v*t><5(J{dPWU_C!+l!PnC_+>+sY~X)6 zEVqHbLv_na2-v_a1+ow1UFW2LjXXq2j?yMxPb!1N!ANZ4os5{>w2AjLM9F48MhSY9 z9*7jd1=XS}x(&Tc**CBDzu!#AMB_c?p`K9u-AXAeJ%65r?S;rCGD`s zvosO|=X>^W57Z&4>Zk}f!?TA+pmL>RP^ICW>K@)*N^Plo_&`JO%UPbNMDpt81?=S; zP(fiE0>0v3qbhaF1O15#8Td)S*WC6}joEd3Ucf%y3H3+Ayny{Y6;+|v&VXo>Q)j4?q-}2U|VJ&wC9O5acr#t4L*#4`D{;^F~I@Zp!Dal;F1}ueBp^5wBd%d>-zEbA*pDN~ZW7;b}^w zAFQ#Xe2G*ViG;Osl&?2R+D%9K=TiAJDD0bn@A)BAgbFY!4jaW3`}KPZ((;-SvV{4}Z-^!+lwu1Z1+aMvOJJ1%#=+sy!R z28cp3@b_pFZU$W8R#am8y@0E{E~-!P&46pXEovXko}YPd)DejN%qO5GBtHze&gUx0 z_HOXy7`vYEBH$+f9Cg0ii-2GGQB-0&3B1K`q51^B2>6Y^LW%Zn^D@vck>?SJ-R5HC zggzVaTD!yRp$-jr5pajMM_qu}UEUYc{h;A1`)wGi%1`Zr&VS`E4U&3B_JPlkIr^JA!h z$(Fz;{00i{W*7LBzgCjHea1_`o>H{lxXt^X&v|9k8@R*Tb6yM8ty`kY3m%OspDq-K zx}Gr5{{MW^$8y6|C;YYiM9ELA4MI3*c*Nwbuc!FzU7Zl z8>DpDwnUy+W9tUK$q|9?cta)GBWh}avGd)U2WqBXsOt&M19j7QRAPGDKxUeY z>J!{Nki%8vs)Y&3T>?#}gG#bav*`rJ&UcIVcQXBox}Fg4UlP9KSIZ@)_Y5p$vcQ%k z^6V2F?_V0eJ1DI4y}&Z2)=IL@a&Wdp#m;vd5$Ft`^_9eWC~rzZC8m!HEN@zh>JvO7 zu!3nD>UzS6z>2UpFKi(xu#)M9l5D|Z`V(X4yQK%Znsj(4CNjI8kRE6?xuFu%vjZ!e z>Y@4srw6*3+M^~U&kJ-n4ONnLdYHx=qQuiQ3rnsES{CSO5}&a}3w6@-0=-OoQSQz2 z0&S)<4$FC)ev--{A}4RtyJ9gjeBKaeAj`wMLvNFhl-gf=n}RXsC6{YkEY=lco8W(M z(}ZHNsTg|xj>TejjH$j)Ef&kfnCg38vDhYzi6gqV=}@uQ35;Eax#(@WT`cwhW8&!KZE|vQ z>|X_`3=#}wpby1jVHgufJZ}?$y>R-JfBR^Q`nRvVo-AIO)AZka)X1(jMX!GVB{g!q z2_ZUZJwd$wuUv{rDRF$PoF&?=Gg`bZo)@<6n1g!mIZ~ALP82=e(xRwjU$cC@ zlz8R;@8>F$`*Q8foh@2?8Y^0F-cMxpO&B4J%;`%AC$%C)baO}XSTrVuBP_aSX}qSp+2t=5ZLQ|fVYBe7IiL-D9GRF8vUUTHWh)Ka3h!dD!h zt9l$?`QLh8l#fO>ILvczSYI0PDlKwW^Y&qfqWm4Bs)oyQ9{#Jx{V?W*qn$EdJXihw zI$J!ymrzvmzpBCU^?%l;YEZTP$B(LAmGdDv2X+OC*43k0Q!4tbxfp>n!6MosL_8O- z==h4`>+1PhyC^9hHL|y{c)qf&csw2<9>ts~eEn}(r+CzGE;&9|t(TQ^rlZVFz2f*- zPS*KoNMVcr8|^yITgSGVP86+-lQaK-+^aZ7yUVEBpCm<#k}7&5z392vI<#W@1XZSb zb@6&^T`{UnVPDF~vrb~$OoA~qkxQ_>lpud4!3l3te;^@FWc@foN|J322q{Hc!?LA` z8VA+7s?+g#rBb5)3UUrRJ{N0~lK)x19Q*QX1yTQP*k*NdvWKX%Z0Dk0ukQbEUr{6M zI0GF=QtegL<3zdM&%$1dlCARbiNj-(d~TKXHghxg?$B5a!xu=-zdGJ`+dbm7t ziN}A{3raqfdl*$x^;fkhTBpPpYA)Oo|Je)2SBf&!h>u+MLpgfwSA? zIg;uXHCAQh5m5D_XkVn0O>*Wqj^2MXZfXQHIRgvlUKSjeInF>edSZSSMpX`~MNv}6 z{h=x;UV$qy<$V5E(SL47MI)f$3@@rpm$@;yUHoTR{WDv~zBtY<_57ebhMKC2oQqy5 zd@gFEM2)lKc>Z&=|5>woMGh*&&9iI&Eehq|MYpq5RvVhNb#uJQm_1P)&I}T zRa>fe;;&Z2UwUXK`l7Y^x6en&_pveZDCYRMUH07qkA?f3cd-A|NQitlu4*m^byDIc zKZ)<1BA%;9^~yK$nEs*s9R1Jd;#0p)9Hak}S13_6&wy5R5)T)QFp}4+C}%6Yf7VFC z91;Bj9w|{{zE}3k@x7Vqk@(E6KDih6x&V%eh0j$~mAolGcZ-}0XT|?LSL6AAuo|8On)}-B! z8*9BLUTPz3VeBeD7jv9qEVq6>W>cD#vB|dhl>28sthw(X{ft9+SrW**nmeOnjA*H+NzGJ4e=x+@VOhU51r>O3R+lLRxBs zy5^^tW43~wZ!e>)XX0T0@*hfS#$(T+%(K*_+4H|YzP%^>XFvJen)86vt`J}DVa?k9 zzni*!#*?#z9jjU2a`$Me`2|6mC8Fn1ir=J&GmEvac9da>ql-%T*F>IUr**LjlDwT$ zNZV`1PS3JQXfo#yAa9V6+v| zFLSQq=ebnU-$Q3*`mY)l3vsYAq6Hm_6X&(^Xp99-6w_wR z_8#(|b0}T?EWJN5mEt^o9AO<}cp}jF2=W=}>T~F!CvOmxJ=>4Vj4_=`p$~DD~_7=Ct za0c($?VLV5D$n3_ALQO^ceVQ;Kbi6-b8AP*-(OFo8C4S$k9po&nKn7*$=X(yl;j*v zw8@vVvCM;v-<}7_>6)&r$qvk!4sj8eSJp;X{%@91S`s&|C0c6ikKjDZwX7>g#`ZF1 z08L2!o}HGiQpTH(vm{NOCD~7zPhp+;0hOG(pRki_{vn<}|LP^q{?Z-7JyWJ4bu3cj zl-Hb?x{>Z(r8cRnABWP_*h9%wUct<)i_dJ@uzc!fUzHq*GUqe7m3OjML85e(JHq9sy3z@qCcfaC29i^}J1|GLT3P<*m8*DW(}kSzWGXXwUiu@i%R3lf98Eci zOyT_SJSKh0b$LF||8fPCd~GH9l(ax(04ej#1%Zs?6l-al=^KsSJ-D88JpzTX*n~<6!T+Yf4Wn% z|NpQ4?eY9S3HyI4p8q`$|Nr&bU*v>W9H`9^ztI+mE!raSdo3#N)nejLT0%UmEyK43 zR*EOIQ^hmd8u5a5hS;uMEf(uHh}HUU#ZlryZMCyh(5mN&%~ADjP!xp^X@Y6BI4yI0_ht8 zTi}1Lb}y%RulUuNb@*)PRq1uw6U={s@ioR>Vue0Q+l8>N0_m#(?}GoO_7Nk+@TK-8 zQkVpcmk-dt6!g7-AH;cQ9k2f&W-apQPK{`%Ms!buX7|ZPhb+ zslMfa7xYmYm13esrI?}pbUxuK|7Uuqc%YRpxRli6pSeYSE8Ic>)A|8lg#b)9w^ zb4~+&kn;l6OmA@+aISW!cJ!DD&e{5&i>3kpd4bnCPrv5WnV_eR@d955KdB#;n&UiM zYw-`!E)z43*TmUeZ%O^NHKQF-UH%ICQ)?5>;rc=8(T=mVw0|99{&VC^XCF?t6KPQ> z!uL6KLXG>(XX0V83Ncf^`b=zqpSjwV?DI

(ke1*DFqN;VrH!wQEDab=|_Qx3KFL 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 diff --git a/Assets/Huawei/Editor/Extensions/StringExtensions.cs b/Assets/Huawei/Editor/Extensions/StringExtensions.cs index 76c6477c..f8be9cca 100644 --- a/Assets/Huawei/Editor/Extensions/StringExtensions.cs +++ b/Assets/Huawei/Editor/Extensions/StringExtensions.cs @@ -103,5 +103,20 @@ public static string RemoveAfter(this string value, char toRemove) index = index == 0 ? value.Length : index; return value.Substring(0, index); } + + public static string ToCamelCase(this string s) + { + var x = s.Replace("_", ""); + if (x.Length == 0) return "null"; + x = Regex.Replace(x, "([A-Z])([A-Z]+)($|[A-Z])", + m => m.Groups[1].Value + m.Groups[2].Value.ToLower() + m.Groups[3].Value); + return char.ToLower(x[0]) + x.Substring(1); + } + + public static string ToPascalCase(this string s) + { + var x = ToCamelCase(s); + return char.ToUpper(x[0]) + x.Substring(1); + } } } diff --git a/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs b/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs new file mode 100644 index 00000000..daf68fe3 --- /dev/null +++ b/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace HmsPlugin +{ + [InitializeOnLoad] + public class HMSPackageChecker + { + static HMSPackageChecker() + { + AssetDatabase.importPackageCompleted += OnImportPackageCompleted; + } + + private static void OnImportPackageCompleted(string packageName) + { + if (packageName.Contains("HMSUnityPackage")) + { + var enabledEditors = HMSMainKitsTabFactory.GetEnabledEditors(); + if (enabledEditors != null && enabledEditors.Count > 0) + { + enabledEditors.ForEach(c => c.DestroyManagers()); + enabledEditors.ForEach(f => f.CreateManagers()); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs.meta b/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs.meta new file mode 100644 index 00000000..6644b8e1 --- /dev/null +++ b/Assets/Huawei/Editor/Utils/HMSPackageChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4374717c2dd7f4e4cb6ae8b88e7f3fc5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Huawei/Editor/View/CloudDBTab.meta b/Assets/Huawei/Editor/View/CloudDBTab.meta new file mode 100644 index 00000000..d45de3f5 --- /dev/null +++ b/Assets/Huawei/Editor/View/CloudDBTab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c6ac8f9f635f214a91e7877fd7c157a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs new file mode 100644 index 00000000..07151eea --- /dev/null +++ b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs @@ -0,0 +1,222 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; + +namespace HmsPlugin +{ + public class HMSCloudDBSettingsDrawer : VerticalSequenceDrawer + { + private TextField.TextField packageNameTextField; + private Label.Label jsonPathLabel; + + private Root rootJson; + + public HMSCloudDBSettingsDrawer() + { + packageNameTextField = new TextField.TextField("Java Package Name: ", "", OnPackageNameChanged); //TODO: reference wiki page to how to obtain java package name. + jsonPathLabel = new Label.Label(); + SetupSequence(); + } + + private void OnPackageNameChanged(string value) + { + + } + + private void OnJsonFileSelected() + { + string path = EditorUtility.OpenFilePanel("Choose a json File", "", "json"); + if (!string.IsNullOrEmpty(path)) + { + rootJson = JsonUtility.FromJson(File.ReadAllText(path)); + jsonPathLabel.SetText(Path.GetFileName(path)); + } + } + + private void SetupSequence() + { + AddDrawer(new HorizontalSequenceDrawer(new HorizontalLine(), new Label.Label("Creating C# Model").SetBold(true), new HorizontalLine())); + AddDrawer(new Space(3)); + AddDrawer(packageNameTextField); + AddDrawer(new Space(3)); + AddDrawer(new HorizontalSequenceDrawer(new Label.Label("Select Json File"), new Space(3), new Button.Button("Select", OnJsonFileSelected).SetWidth(100), jsonPathLabel)); + AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new Button.Button("Generate C# Models", OnGenerateButton).SetWidth(250), new Spacer())); + AddDrawer(new HorizontalLine()); + AddDrawer(new Space(5)); + } + + private void OnGenerateButton() + { + if (rootJson != null && !string.IsNullOrEmpty(packageNameTextField.GetCurrentText())) + { + foreach (var item in rootJson.objectTypes) + { + using (var file = File.CreateText(Application.dataPath + "/Huawei/Scripts/CloudDB/" + item.objectTypeName + ".cs")) + { + file.WriteLine("using HuaweiMobileServices.CloudDB;"); + file.WriteLine("using HuaweiMobileServices.Utils;"); + file.WriteLine("using UnityEngine;\n"); + file.WriteLine("using System;\n"); + file.WriteLine("namespace HmsPlugin\n{"); + file.WriteLine("\tpublic class " + item.objectTypeName + " : JavaObjectWrapper, ICloudDBZoneObject\n\t{"); + file.WriteLine("\t\tpublic " + item.objectTypeName + "() : base(\"" + packageNameTextField.GetCurrentText() + "\") { }"); + file.WriteLine("\t\tpublic " + item.objectTypeName + "(AndroidJavaObject javaObject) : base(javaObject) { }"); + foreach (var field in item.fields) + { + file.WriteLine("\t\tprivate " + GetFieldType(field.fieldType) + " " + field.fieldName + ";"); + } + file.WriteLine(""); + + foreach (var field in item.fields) + { + file.WriteLine(WriteProperty(field)); + } + + file.WriteLine("\t\tpublic AndroidJavaObject GetObj() => base.JavaObject;"); + file.WriteLine("\t\tpublic void SetObj(AndroidJavaObject arg0) => base.JavaObject = arg0;"); + file.WriteLine("\t}\n}"); + } + } + + AssetDatabase.Refresh(); + } + } + + private string WriteProperty(Field field) + { + StringBuilder builder = new StringBuilder(); + builder.AppendLine("\t\tpublic " + GetFieldType(field.fieldType) + " " + field.fieldName.ToPascalCase() + "\n\t\t{"); + switch (field.fieldType) + { + case "String": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", value); }"); + break; + case "Boolean": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", value); }"); + break; + case "Short": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"shortValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Short\", value)); }"); + break; + case "Byte": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"byteValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Byte\", value)); }"); + break; + case "Integer": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"intValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Integer\", value)); }"); + break; + case "Long": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"longValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Long\", value)); }"); + break; + case "Float": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"floatValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Float\", value)); }"); + break; + case "Double": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"doubleValue\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.lang.Double\", value)); }"); + break; + case "ByteArray": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", value); }"); + break; + case "Text": + builder.AppendLine("\t\t\tget { return Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"get\"); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"com.huawei.agconnect.cloud.database.Text\", value)); }"); + break; + case "Date": + builder.AppendLine("\t\t\tget { return new DateTime(Call(\"get" + field.fieldName.ToPascalCase() + "\").Call(\"getTime\")); }"); + builder.AppendLine("\t\t\tset { Call(\"set" + field.fieldName.ToPascalCase() + "\", new AndroidJavaObject(\"java.util.Date\", value.Ticks)); }"); + break; + default: + break; + } + builder.AppendLine("\t\t}"); + return builder.ToString(); + } + + private string GetFieldType(string fieldType) + { + switch (fieldType) + { + case "String": + return "string"; + case "Boolean": + return "bool"; + case "Short": + return "short"; + case "Byte": + return "byte"; + case "Integer": + return "int"; + case "Long": + return "long"; + case "Float": + return "float"; + case "Double": + return "double"; + case "ByteArray": + return "byte[]"; + case "Text": + return "string"; + case "Date": + return "DateTime"; + default: + break; + } + return ""; + } + + [System.Serializable] + private class Permission + { + public string role; + public List rights; + } + [System.Serializable] + private class Index + { + public string indexName; + public List indexList; + } + [System.Serializable] + private class Field + { + public bool isNeedEncrypt; + public string fieldName; + public bool notNull; + public bool belongPrimaryKey; + public string fieldType; + public string defaultValue; + } + [System.Serializable] + private class ObjectType + { + public List indexes; + public string objectTypeName; + public List fields; + } + [System.Serializable] + private class Root + { + public int schemaVersion; + public List permissions; + public List objectTypes; + } + [System.Serializable] + private class PermissionRoot + { + public List permissions; + public string objectTypeName; + } + } +} diff --git a/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs.meta b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs.meta new file mode 100644 index 00000000..12051735 --- /dev/null +++ b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBSettingsDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f605df43949110b4a8d6a4c85d2f02d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs new file mode 100644 index 00000000..f1a41f5f --- /dev/null +++ b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HmsPlugin +{ + public class HMSCloudDBTabFactory + { + public static TabView CreateTab(string title) + { + var tabView = new TabView(title); + tabView.AddDrawer(new HMSCloudDBSettingsDrawer()); + + return tabView; + } + } +} diff --git a/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs.meta b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs.meta new file mode 100644 index 00000000..6d585933 --- /dev/null +++ b/Assets/Huawei/Editor/View/CloudDBTab/HMSCloudDBTabFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dcd03fdb0f208c47a4736d28ffa8813 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Huawei/Editor/View/MainWindow/AccountToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/AccountToggleEditor.cs index 601ec082..727c4590 100644 --- a/Assets/Huawei/Editor/View/MainWindow/AccountToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/AccountToggleEditor.cs @@ -6,7 +6,7 @@ namespace HmsPlugin { - public class AccountToggleEditor : IDrawer, IDependentToggle + public class AccountToggleEditor : ToggleEditor, IDrawer, IDependentToggle { private Toggle.Toggle _toggle; @@ -22,7 +22,7 @@ private void OnStateChanged(bool value) { if (value) { - CreateManagerObject(); + CreateManagers(); } else { @@ -33,14 +33,7 @@ private void OnStateChanged(bool value) return; } - var accountManagers = GameObject.FindObjectsOfType(); - if (accountManagers.Length > 0) - { - for (int i = 0; i < accountManagers.Length; i++) - { - GameObject.DestroyImmediate(accountManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(AccountKitEnabled, value); } @@ -54,10 +47,10 @@ public void SetToggle() { _toggle.SetChecked(true); HMSMainEditorSettings.Instance.Settings.SetBool(AccountKitEnabled, true); - CreateManagerObject(); + CreateManagers(); } - private void CreateManagerObject() + public override void CreateManagers() { if (GameObject.FindObjectOfType() == null) { @@ -65,6 +58,20 @@ private void CreateManagerObject() obj.AddComponent(); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } + Enabled = true; + } + + public override void DestroyManagers() + { + var accountManagers = GameObject.FindObjectsOfType(); + if (accountManagers.Length > 0) + { + for (int i = 0; i < accountManagers.Length; i++) + { + GameObject.DestroyImmediate(accountManagers[i].gameObject); + } + } + Enabled = false; } } } \ No newline at end of file diff --git a/Assets/Huawei/Editor/View/MainWindow/AdsToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/AdsToggleEditor.cs index 60e40206..5cb12b9d 100644 --- a/Assets/Huawei/Editor/View/MainWindow/AdsToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/AdsToggleEditor.cs @@ -6,7 +6,7 @@ namespace HmsPlugin { - public class AdsToggleEditor : IDrawer + public class AdsToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; private TabBar _tabBar; @@ -27,24 +27,12 @@ private void OnStateChanged(bool value) if (value) { _tabBar.AddTab(_tabView); - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSAdsKitManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); } else { - var adsKitManagers = GameObject.FindObjectsOfType(); - if (adsKitManagers.Length > 0) - { - for (int i = 0; i < adsKitManagers.Length; i++) - { - GameObject.DestroyImmediate(adsKitManagers[i].gameObject); - } - } _tabBar.RemoveTab(_tabView); + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(AdsKitEnabled, value); } @@ -53,5 +41,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSAdsKitManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var adsKitManagers = GameObject.FindObjectsOfType(); + if (adsKitManagers.Length > 0) + { + for (int i = 0; i < adsKitManagers.Length; i++) + { + GameObject.DestroyImmediate(adsKitManagers[i].gameObject); + } + } + Enabled = false; + } } } \ No newline at end of file diff --git a/Assets/Huawei/Editor/View/MainWindow/AnalyticsToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/AnalyticsToggleEditor.cs index 34b4bd62..df7df44a 100644 --- a/Assets/Huawei/Editor/View/MainWindow/AnalyticsToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/AnalyticsToggleEditor.cs @@ -6,7 +6,7 @@ namespace HmsPlugin { - public class AnalyticsToggleEditor : IDrawer, IDependentToggle + public class AnalyticsToggleEditor : ToggleEditor, IDrawer, IDependentToggle { private Toggle.Toggle _toggle; @@ -22,7 +22,7 @@ private void OnStateChanged(bool value) { if (value) { - CreateManagerObject(); + CreateManagers(); } else { @@ -40,20 +40,25 @@ private void OnStateChanged(bool value) return; } - var analyticManagers = GameObject.FindObjectsOfType(); - if (analyticManagers.Length > 0) - { - for (int i = 0; i < analyticManagers.Length; i++) - { - GameObject.DestroyImmediate(analyticManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(AnalyticsKitEnabled, value); } - private void CreateManagerObject() + public void Draw() + { + _toggle.Draw(); + } + + public void SetToggle() + { + _toggle.SetChecked(true); + HMSMainEditorSettings.Instance.Settings.SetBool(AnalyticsKitEnabled, true); + CreateManagers(); + } + + public override void CreateManagers() { if (GameObject.FindObjectOfType() == null) { @@ -61,18 +66,20 @@ private void CreateManagerObject() obj.AddComponent(); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } + Enabled = true; } - public void Draw() - { - _toggle.Draw(); - } - - public void SetToggle() + public override void DestroyManagers() { - _toggle.SetChecked(true); - HMSMainEditorSettings.Instance.Settings.SetBool(AnalyticsKitEnabled, true); - CreateManagerObject(); + var analyticManagers = GameObject.FindObjectsOfType(); + if (analyticManagers.Length > 0) + { + for (int i = 0; i < analyticManagers.Length; i++) + { + GameObject.DestroyImmediate(analyticManagers[i].gameObject); + } + } + Enabled = false; } } diff --git a/Assets/Huawei/Editor/View/MainWindow/AppMessagingToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/AppMessagingToggleEditor.cs index 04679a13..e1a9f871 100644 --- a/Assets/Huawei/Editor/View/MainWindow/AppMessagingToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/AppMessagingToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class AppMessagingToggleEditor : IDrawer + public class AppMessagingToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; @@ -24,23 +24,11 @@ private void OnStateChanged(bool value) { if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSAppMessagingManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); } else { - var appMessagingManagers = GameObject.FindObjectsOfType(); - if (appMessagingManagers.Length > 0) - { - for (int i = 0; i < appMessagingManagers.Length; i++) - { - GameObject.DestroyImmediate(appMessagingManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(AppMessagingEnabled, value); } @@ -49,5 +37,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSAppMessagingManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var appMessagingManagers = GameObject.FindObjectsOfType(); + if (appMessagingManagers.Length > 0) + { + for (int i = 0; i < appMessagingManagers.Length; i++) + { + GameObject.DestroyImmediate(appMessagingManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/AuthToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/AuthToggleEditor.cs index d8046606..4b439370 100644 --- a/Assets/Huawei/Editor/View/MainWindow/AuthToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/AuthToggleEditor.cs @@ -9,7 +9,7 @@ namespace HmsPlugin { - internal class AuthToggleEditor : IDrawer, IDependentToggle + internal class AuthToggleEditor : ToggleEditor, IDrawer, IDependentToggle { private Toggle.Toggle _toggle; @@ -25,7 +25,7 @@ private void OnStateChanged(bool value) { if (value) { - CreateManagerObject(); + CreateManagers(); } else { @@ -35,19 +35,24 @@ private void OnStateChanged(bool value) _toggle.SetChecked(true); return; } - var authManagers = GameObject.FindObjectsOfType(); - if (authManagers.Length > 0) - { - for (int i = 0; i < authManagers.Length; i++) - { - GameObject.DestroyImmediate(authManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(AuthEnabled, value); } - private void CreateManagerObject() + public void Draw() + { + _toggle.Draw(); + } + + public void SetToggle() + { + _toggle.SetChecked(true); + HMSMainEditorSettings.Instance.Settings.SetBool(AuthEnabled, true); + CreateManagers(); + } + + public override void CreateManagers() { if (GameObject.FindObjectOfType() == null) { @@ -55,18 +60,20 @@ private void CreateManagerObject() obj.AddComponent(); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } + Enabled = true; } - public void Draw() - { - _toggle.Draw(); - } - - public void SetToggle() + public override void DestroyManagers() { - _toggle.SetChecked(true); - HMSMainEditorSettings.Instance.Settings.SetBool(AuthEnabled, true); - CreateManagerObject(); + var authManagers = GameObject.FindObjectsOfType(); + if (authManagers.Length > 0) + { + for (int i = 0; i < authManagers.Length; i++) + { + GameObject.DestroyImmediate(authManagers[i].gameObject); + } + } + Enabled = false; } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/CloudDBToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/CloudDBToggleEditor.cs index 35b2d723..bb0f1630 100644 --- a/Assets/Huawei/Editor/View/MainWindow/CloudDBToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/CloudDBToggleEditor.cs @@ -8,16 +8,21 @@ namespace HmsPlugin { - public class CloudDBToggleEditor : IDrawer + public class CloudDBToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; + private TabBar _tabBar; + private TabView _tabView; private IDependentToggle _dependentToggle; public const string CloudDBEnabled = "CloudDB"; - public CloudDBToggleEditor(IDependentToggle dependentToggle) + public CloudDBToggleEditor(TabBar tabBar, IDependentToggle dependentToggle) { _dependentToggle = dependentToggle; + _tabView = HMSCloudDBTabFactory.CreateTab("Cloud DB"); + _tabBar = tabBar; + bool enabled = HMSMainEditorSettings.Instance.Settings.GetBool(CloudDBEnabled); _toggle = new Toggle.Toggle("Cloud DB*", enabled, OnStateChanged, true).SetTooltip("CloudDB is dependent on Auth Service."); } @@ -26,24 +31,14 @@ private void OnStateChanged(bool value) { if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSCloudDBManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); _dependentToggle.SetToggle(); + _tabBar.AddTab(_tabView); } else { - var cloudDBManagers = GameObject.FindObjectsOfType(); - if (cloudDBManagers.Length > 0) - { - for (int i = 0; i < cloudDBManagers.Length; i++) - { - GameObject.DestroyImmediate(cloudDBManagers[i].gameObject); - } - } + DestroyManagers(); + _tabBar.RemoveTab(_tabView); } HMSMainEditorSettings.Instance.Settings.SetBool(CloudDBEnabled, value); } @@ -52,5 +47,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSCloudDBManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var cloudDBManagers = GameObject.FindObjectsOfType(); + if (cloudDBManagers.Length > 0) + { + for (int i = 0; i < cloudDBManagers.Length; i++) + { + GameObject.DestroyImmediate(cloudDBManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/CrashToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/CrashToggleEditor.cs index 25f88f77..5fa92dbc 100644 --- a/Assets/Huawei/Editor/View/MainWindow/CrashToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/CrashToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class CrashToggleEditor : IDrawer + public class CrashToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; private IDependentToggle _dependentToggle; @@ -26,24 +26,12 @@ private void OnStateChanged(bool value) { if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSCrashManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); _dependentToggle.SetToggle(); } else { - var crashManagers = GameObject.FindObjectsOfType(); - if (crashManagers.Length > 0) - { - for (int i = 0; i < crashManagers.Length; i++) - { - GameObject.DestroyImmediate(crashManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(CrashKitEnabled, value); } @@ -52,5 +40,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSCrashManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var crashManagers = GameObject.FindObjectsOfType(); + if (crashManagers.Length > 0) + { + for (int i = 0; i < crashManagers.Length; i++) + { + GameObject.DestroyImmediate(crashManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/DriveKitToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/DriveKitToggleEditor.cs index df8ac630..b57afb27 100644 --- a/Assets/Huawei/Editor/View/MainWindow/DriveKitToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/DriveKitToggleEditor.cs @@ -6,7 +6,7 @@ namespace HmsPlugin { - public class DriveKitToggleEditor : IDrawer + public class DriveKitToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; @@ -48,5 +48,15 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + //throw new NotImplementedException(); + } + + public override void DestroyManagers() + { + //throw new NotImplementedException(); + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/GameServiceToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/GameServiceToggleEditor.cs index bf857be1..8cbb7e1e 100644 --- a/Assets/Huawei/Editor/View/MainWindow/GameServiceToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/GameServiceToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class GameServiceToggleEditor : IDrawer + public class GameServiceToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; private TabBar _tabBar; @@ -31,27 +31,12 @@ private void OnStateChanged(bool value) if (value) { _tabBar.AddTab(_tabView); - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSGameManager"); - obj.AddComponent(); - obj.AddComponent(); - obj.AddComponent(); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); _dependentToggle.SetToggle(); } else { - var gameKitManagers = GameObject.FindObjectsOfType(); - if (gameKitManagers.Length > 0) - { - for (int i = 0; i < gameKitManagers.Length; i++) - { - GameObject.DestroyImmediate(gameKitManagers[i].gameObject); - } - } + DestroyManagers(); _tabBar.RemoveTab(_tabView); } HMSMainEditorSettings.Instance.Settings.SetBool(GameServiceEnabled, value); @@ -61,5 +46,32 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSGameManager"); + obj.AddComponent(); + obj.AddComponent(); + obj.AddComponent(); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var gameKitManagers = GameObject.FindObjectsOfType(); + if (gameKitManagers.Length > 0) + { + for (int i = 0; i < gameKitManagers.Length; i++) + { + GameObject.DestroyImmediate(gameKitManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/HMSMainKitsTabFactory.cs b/Assets/Huawei/Editor/View/MainWindow/HMSMainKitsTabFactory.cs index d5ccc47e..63c50066 100644 --- a/Assets/Huawei/Editor/View/MainWindow/HMSMainKitsTabFactory.cs +++ b/Assets/Huawei/Editor/View/MainWindow/HMSMainKitsTabFactory.cs @@ -15,39 +15,73 @@ internal class HMSMainKitsTabFactory { private static string versionInfo = ""; + + private static List toggleEditors; + static HMSMainKitsTabFactory() { versionInfo = File.ReadAllText(Application.dataPath + "/Huawei/VERSION"); + toggleEditors = new List(); } public static TabView CreateTab(TabBar tabBar) { + toggleEditors.Clear(); var tab = new TabView("Kits"); tabBar.AddTab(tab); + var adsToggleEditor = new AdsToggleEditor(tabBar); + var accountEditor = new AccountToggleEditor(); + var gameServiceToggleEditor = new GameServiceToggleEditor(tabBar, accountEditor); + var pushToggleEditor = new PushToggleEditor(); var analyticsEditor = new AnalyticsToggleEditor(); var authEditor = new AuthToggleEditor(); - var accountEditor = new AccountToggleEditor(); + var iapToggleEditor = new IAPToggleEditor(tabBar); + var remoteConfigToggleEditor = new RemoteConfigToggleEditor(tabBar, analyticsEditor); + var crashToggleEditor = new CrashToggleEditor(analyticsEditor); + var cloudDBToggleEditor = new CloudDBToggleEditor(tabBar, authEditor); + var driveToggleEditor = new DriveKitToggleEditor(); + var nearbyServiceToggleEditor = new NearbyServiceToggleEditor(); + var appMessagingToggleEditor = new AppMessagingToggleEditor(); tab.AddDrawer(new HorizontalLine()); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new AdsToggleEditor(tabBar), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new GameServiceToggleEditor(tabBar, accountEditor), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new PushToggleEditor(), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new IAPToggleEditor(tabBar), new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), adsToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), gameServiceToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), pushToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), iapToggleEditor, new Spacer())); tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), accountEditor, new Spacer())); tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), analyticsEditor, new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new RemoteConfigToggleEditor(tabBar, analyticsEditor), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new CrashToggleEditor(analyticsEditor), new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), remoteConfigToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), crashToggleEditor, new Spacer())); tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), authEditor, new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new CloudDBToggleEditor(authEditor), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new DriveKitToggleEditor(), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new NearbyServiceToggleEditor(), new Spacer())); - tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), new AppMessagingToggleEditor(), new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), cloudDBToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), driveToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), nearbyServiceToggleEditor, new Spacer())); + tab.AddDrawer(new HorizontalSequenceDrawer(new Spacer(), appMessagingToggleEditor, new Spacer())); tab.AddDrawer(new HorizontalLine()); tab.AddDrawer(new Spacer()); - tab.AddDrawer(new Clickable(new Label("HMS Unity Plugin v" + versionInfo).SetBold(true), () => { Application.OpenURL("https://github.com/EvilMindDevs/hms-unity-plugin/tree/2.0"); })); + tab.AddDrawer(new Clickable(new Label("HMS Unity Plugin v" + versionInfo).SetBold(true), () => { Application.OpenURL("https://github.com/EvilMindDevs/hms-unity-plugin/"); })); tab.AddDrawer(new HelpboxAGConnectFile()); + toggleEditors.Add(adsToggleEditor); + toggleEditors.Add(accountEditor); + toggleEditors.Add(gameServiceToggleEditor); + toggleEditors.Add(pushToggleEditor); + toggleEditors.Add(analyticsEditor); + toggleEditors.Add(authEditor); + toggleEditors.Add(iapToggleEditor); + toggleEditors.Add(remoteConfigToggleEditor); + toggleEditors.Add(crashToggleEditor); + toggleEditors.Add(cloudDBToggleEditor); + toggleEditors.Add(driveToggleEditor); + toggleEditors.Add(nearbyServiceToggleEditor); + toggleEditors.Add(appMessagingToggleEditor); + return tab; } + + public static List GetEnabledEditors() + { + return toggleEditors.FindAll(c => c.Enabled); + } } \ No newline at end of file diff --git a/Assets/Huawei/Editor/View/MainWindow/HMSMainWindow.cs b/Assets/Huawei/Editor/View/MainWindow/HMSMainWindow.cs index c8a89a89..cdc79d7b 100644 --- a/Assets/Huawei/Editor/View/MainWindow/HMSMainWindow.cs +++ b/Assets/Huawei/Editor/View/MainWindow/HMSMainWindow.cs @@ -1,8 +1,5 @@  using HmsPlugin; -using HmsPlugin.HelpBox; -using HmsPlugin.Label; -using HmsPlugin.TextField; using HmsPlugin.Window; using UnityEditor; @@ -20,7 +17,6 @@ public static void CheckForUpdates() HMSPluginUpdater.Request(true); } - public override IDrawer CreateDrawer() { var tabBar = new TabBar(); diff --git a/Assets/Huawei/Editor/View/MainWindow/IAPToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/IAPToggleEditor.cs index 891cf698..8a8b8b91 100644 --- a/Assets/Huawei/Editor/View/MainWindow/IAPToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/IAPToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class IAPToggleEditor : IDrawer + public class IAPToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; private TabBar _tabBar; @@ -29,23 +29,11 @@ private void OnStateChanged(bool value) if (value) { _tabBar.AddTab(_tabView); - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSIAPManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); } else { - var iapManagers = GameObject.FindObjectsOfType(); - if (iapManagers.Length > 0) - { - for (int i = 0; i < iapManagers.Length; i++) - { - GameObject.DestroyImmediate(iapManagers[i].gameObject); - } - } + DestroyManagers(); _tabBar.RemoveTab(_tabView); } HMSMainEditorSettings.Instance.Settings.SetBool(IAPKitEnabled, value); @@ -55,5 +43,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSIAPManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var iapManagers = GameObject.FindObjectsOfType(); + if (iapManagers.Length > 0) + { + for (int i = 0; i < iapManagers.Length; i++) + { + GameObject.DestroyImmediate(iapManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/NearbyServiceToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/NearbyServiceToggleEditor.cs index 363f9c8f..230b12b3 100644 --- a/Assets/Huawei/Editor/View/MainWindow/NearbyServiceToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/NearbyServiceToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class NearbyServiceToggleEditor : IDrawer + public class NearbyServiceToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; @@ -24,23 +24,11 @@ private void OnStateChanged(bool value) { if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSNearbyServiceManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); } else { - var nearbyServiceManagers = GameObject.FindObjectsOfType(); - if (nearbyServiceManagers.Length > 0) - { - for (int i = 0; i < nearbyServiceManagers.Length; i++) - { - GameObject.DestroyImmediate(nearbyServiceManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(NearbyServiceEnabled, value); } @@ -49,5 +37,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSNearbyServiceManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var nearbyServiceManagers = GameObject.FindObjectsOfType(); + if (nearbyServiceManagers.Length > 0) + { + for (int i = 0; i < nearbyServiceManagers.Length; i++) + { + GameObject.DestroyImmediate(nearbyServiceManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/PushToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/PushToggleEditor.cs index 12fff2fa..4c86a5fd 100644 --- a/Assets/Huawei/Editor/View/MainWindow/PushToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/PushToggleEditor.cs @@ -6,7 +6,7 @@ namespace HmsPlugin { - public class PushToggleEditor : IDrawer + public class PushToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; @@ -20,25 +20,13 @@ public PushToggleEditor() private void OnStateChanged(bool value) { - if(value) + if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSPushKitManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); } else { - var pushManagers = GameObject.FindObjectsOfType(); - if (pushManagers.Length > 0) - { - for (int i = 0; i < pushManagers.Length; i++) - { - GameObject.DestroyImmediate(pushManagers[i].gameObject); - } - } + DestroyManagers(); } HMSMainEditorSettings.Instance.Settings.SetBool(PushKitEnabled, value); } @@ -47,5 +35,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSPushKitManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var pushManagers = GameObject.FindObjectsOfType(); + if (pushManagers.Length > 0) + { + for (int i = 0; i < pushManagers.Length; i++) + { + GameObject.DestroyImmediate(pushManagers[i].gameObject); + } + } + Enabled = false; + } } } \ No newline at end of file diff --git a/Assets/Huawei/Editor/View/MainWindow/RemoteConfigToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/RemoteConfigToggleEditor.cs index 30ec4b6d..509239eb 100644 --- a/Assets/Huawei/Editor/View/MainWindow/RemoteConfigToggleEditor.cs +++ b/Assets/Huawei/Editor/View/MainWindow/RemoteConfigToggleEditor.cs @@ -8,7 +8,7 @@ namespace HmsPlugin { - public class RemoteConfigToggleEditor : IDrawer + public class RemoteConfigToggleEditor : ToggleEditor, IDrawer { private Toggle.Toggle _toggle; private TabBar _tabBar; @@ -31,25 +31,13 @@ private void OnStateChanged(bool value) HMSMainEditorSettings.Instance.Settings.SetBool(RemoteConfigEnabled, value); if (value) { - if (GameObject.FindObjectOfType() == null) - { - GameObject obj = new GameObject("HMSRemoteConfigManager"); - obj.AddComponent(); - EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); - } + CreateManagers(); _dependentToggle.SetToggle(); _tabBar.AddTab(_tabView); } else { - var remoteConfigManagers = GameObject.FindObjectsOfType(); - if (remoteConfigManagers.Length > 0) - { - for (int i = 0; i < remoteConfigManagers.Length; i++) - { - GameObject.DestroyImmediate(remoteConfigManagers[i].gameObject); - } - } + DestroyManagers(); _tabBar.RemoveTab(_tabView); } } @@ -58,5 +46,29 @@ public void Draw() { _toggle.Draw(); } + + public override void CreateManagers() + { + if (GameObject.FindObjectOfType() == null) + { + GameObject obj = new GameObject("HMSRemoteConfigManager"); + obj.AddComponent(); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + Enabled = true; + } + + public override void DestroyManagers() + { + var remoteConfigManagers = GameObject.FindObjectsOfType(); + if (remoteConfigManagers.Length > 0) + { + for (int i = 0; i < remoteConfigManagers.Length; i++) + { + GameObject.DestroyImmediate(remoteConfigManagers[i].gameObject); + } + } + Enabled = false; + } } } diff --git a/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs b/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs new file mode 100644 index 00000000..c6c8b9bf --- /dev/null +++ b/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HmsPlugin +{ + public abstract class ToggleEditor + { + public bool Enabled { get; set; } + public abstract void CreateManagers(); + public abstract void DestroyManagers(); + } +} diff --git a/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs.meta b/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs.meta new file mode 100644 index 00000000..312c19e8 --- /dev/null +++ b/Assets/Huawei/Editor/View/MainWindow/ToggleEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03e7bb15123052940841fc34eebeec45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Huawei/Scripts/Account/HMSAccountManager.cs b/Assets/Huawei/Scripts/Account/HMSAccountManager.cs index 14b683f6..5a8ad792 100644 --- a/Assets/Huawei/Scripts/Account/HMSAccountManager.cs +++ b/Assets/Huawei/Scripts/Account/HMSAccountManager.cs @@ -84,6 +84,7 @@ public void SignIn() }, (error) => { HuaweiId = null; + Debug.LogError("[HMSAccountManager]: Sign in failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSignInFailed?.Invoke(error); }); } @@ -98,6 +99,7 @@ public void SignInDrive() }, (error) => { HuaweiId = null; + Debug.LogError("[HMSAccountManager]: Sign in Drive failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSignInFailed?.Invoke(error); }); } @@ -112,6 +114,7 @@ public void SilentSignIn() }).AddOnFailureListener((exception) => { HuaweiId = null; + Debug.LogError("[HMSAccountManager]: Silent Sign in failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnSignInFailed?.Invoke(exception); }); } @@ -129,6 +132,7 @@ public void CancelAuthorization() Debug.Log("[HMS]: CancelAuthorization onSuccess "); }).AddOnFailureListener((exception) => { + Debug.LogError("[HMSAccountManager]: Cancel Authorization failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnSignInFailed?.Invoke(exception); }); } diff --git a/Assets/Huawei/Scripts/Ads/HMSAdsKitManager.cs b/Assets/Huawei/Scripts/Ads/HMSAdsKitManager.cs index e0277909..869996e9 100644 --- a/Assets/Huawei/Scripts/Ads/HMSAdsKitManager.cs +++ b/Assets/Huawei/Scripts/Ads/HMSAdsKitManager.cs @@ -285,6 +285,16 @@ public void ShowRewardedAd() } } + public bool IsRewardedAdLoaded + { + get + { + if (rewardedView == null) + return false; + return rewardedView.Loaded; + } + } + #endregion #region LISTENERS diff --git a/Assets/Huawei/Scripts/AuthService/HMSAuthServiceManager.cs b/Assets/Huawei/Scripts/AuthService/HMSAuthServiceManager.cs index 6e92e908..16284497 100644 --- a/Assets/Huawei/Scripts/AuthService/HMSAuthServiceManager.cs +++ b/Assets/Huawei/Scripts/AuthService/HMSAuthServiceManager.cs @@ -38,6 +38,7 @@ public void SignIn(AGConnectAuthCredential paramAGConnectAuthCredential) }) .AddOnFailureListener((error) => { + Debug.LogError("[HMSAuthServiceManager]: Sign in failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSignInFailed?.Invoke(error); }); } @@ -52,6 +53,7 @@ public void SignInAnonymously() }) .AddOnFailureListener((error) => { + Debug.LogError("[HMSAuthServiceManager]: Sign in Anonymously failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSignInFailed?.Invoke(error); }); } @@ -82,6 +84,7 @@ public void CreateUser(EmailUser emailUser) OnCreateUserSuccess?.Invoke(signInResult); }) .AddOnFailureListener(error => { + Debug.LogError("[HMSAuthServiceManager]: Create User failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnCreateUserFailed?.Invoke(error); }); } @@ -95,6 +98,7 @@ public void CreateUser(PhoneUser phoneUser) OnCreateUserSuccess?.Invoke(signInResult); }) .AddOnFailureListener(error => { + Debug.LogError("[HMSAuthServiceManager]: Create User failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnCreateUserFailed?.Invoke(error); }); } @@ -107,7 +111,8 @@ public void ResetPassword(string email, string newPassword, string verifyCode) OnResetPasswordSuccess?.Invoke(true); }) .AddOnFailureListener(error => { - OnSignInFailed?.Invoke(error); + Debug.LogError("[HMSAuthServiceManager]: Reset Password failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); + OnResetPasswordFailed?.Invoke(error); }); } @@ -119,7 +124,8 @@ public void ResetPassword(string countryCode, string phoneNumber, string newPass OnResetPasswordSuccess?.Invoke(true); }) .AddOnFailureListener(error => { - OnSignInFailed?.Invoke(error); + Debug.LogError("[HMSAuthServiceManager]: Reset Password failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); + OnResetPasswordFailed?.Invoke(error); }); } } diff --git a/Assets/Huawei/Scripts/CloudDB/BookInfo.cs b/Assets/Huawei/Scripts/CloudDB/BookInfo.cs index 4cf50b33..d24a3e27 100644 --- a/Assets/Huawei/Scripts/CloudDB/BookInfo.cs +++ b/Assets/Huawei/Scripts/CloudDB/BookInfo.cs @@ -1,45 +1,44 @@ -using HuaweiMobileServices.CloudDB; +using HuaweiMobileServices.CloudDB; using HuaweiMobileServices.Utils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using UnityEngine; +using System; + namespace HmsPlugin { - public class BookInfo : JavaObjectWrapper, ICloudDBZoneObject + public class BookInfo : JavaObjectWrapper, ICloudDBZoneObject { - public BookInfo() : base("com.clouddbdemo.kb.huawei.BookInfo") { } + public BookInfo() : base("selam") { } public BookInfo(AndroidJavaObject javaObject) : base(javaObject) { } - - private int _id; - private string _bookName; - private string _author; - private double _price; - private string _publisher; - private Date _publishTime; - private bool _shadowFlag = true; + private int id; + private string bookName; + private string author; + private double price; + private string publisher; + private DateTime publishTime; + private bool shadowFlag; public int Id { get { return Call("getId").Call("intValue"); } set { Call("setId", new AndroidJavaObject("java.lang.Integer", value)); } } + public string BookName { get { return Call("getBookName"); } set { Call("setBookName", value); } } + public string Author { get { return Call("getAuthor"); } set { Call("setAuthor", value); } } + public double Price { - get { return Call("getPrice").Call("doubleValue"); } + get { return Call("getPrice").Call("doubleValue"); } set { Call("setPrice", new AndroidJavaObject("java.lang.Double", value)); } } @@ -49,10 +48,10 @@ public string Publisher set { Call("setPublisher", value); } } - public Date PublishTime + public DateTime PublishTime { - get { return Call("getPublishTime"); } - set { Call("setPublishTime", value); } + get { return new DateTime(Call("getPublishTime").Call("getTime")); } + set { Call("setPublishTime", new AndroidJavaObject("java.util.Date", value.Ticks)); } } public bool ShadowFlag @@ -61,8 +60,7 @@ public bool ShadowFlag set { Call("setShadowFlag", value); } } - public AndroidJavaObject GetObj() => base.JavaObject; - public void SetObj(AndroidJavaObject arg0) => base.JavaObject = arg0; - - } + public AndroidJavaObject GetObj() => base.JavaObject; + public void SetObj(AndroidJavaObject arg0) => base.JavaObject = arg0; + } } diff --git a/Assets/Huawei/Scripts/CloudDB/HMSCloudDBManager.cs b/Assets/Huawei/Scripts/CloudDB/HMSCloudDBManager.cs index 3edfd091..f4b28cda 100644 --- a/Assets/Huawei/Scripts/CloudDB/HMSCloudDBManager.cs +++ b/Assets/Huawei/Scripts/CloudDB/HMSCloudDBManager.cs @@ -8,10 +8,11 @@ namespace HmsPlugin { public class HMSCloudDBManager : HMSSingleton { - string TAG = "CloudDB Manager"; + string TAG = "HMSCloudDBManager"; AGConnectCloudDB mCloudDB = null; CloudDBZoneConfig mConfig = null; CloudDBZone mCloudDBZone = null; + ListenerHandler mRegister = null; public Action OnOpenCloudDBZone2Success { get; set; } public Action OnOpenCloudDBZone2Failed { get; set; } @@ -43,6 +44,9 @@ public class HMSCloudDBManager : HMSSingleton public Action> OnExecuteQueryUnsyncedSuccess { get; set; } public Action OnExecuteQueryUnsyncedFailed { get; set; } + public Action> OnCloudDBZoneSnapshot { get; set; } + public Action OnCloudDBZoneSnapshotException { get; set; } + public void Initialize() { AGConnectCloudDB.Initialize(); @@ -78,7 +82,7 @@ public void OpenCloudDBZone(string CloudDBZoneName, CloudDBZoneConfig.CloudDBZon } catch (Exception e) { - Debug.Log($"[{TAG}]: CloudDBZoneConfig() exception " + e.Message); + Debug.LogError($"[{TAG}]: CloudDBZoneConfig() exception " + e.Message); } Debug.Log($"[{TAG}]: OpenCloudDBZone"); @@ -390,16 +394,17 @@ public void ExecuteQueryUnsynced(CloudDBZoneQuery query) }); } - public void SubscribeSnapshot(CloudDBZoneQuery cloudDBZoneQuery, CloudDBZoneQuery.CloudDBZoneQueryPolicy cloudDBZoneQueryPolicy, OnSnapshotListener listener) + public void SubscribeSnapshot(CloudDBZoneQuery cloudDBZoneQuery, CloudDBZoneQuery.CloudDBZoneQueryPolicy cloudDBZoneQueryPolicy) { if (mCloudDBZone == null) { - Debug.Log($"[{TAG}]: CloudDBZone is null, try re-open it"); + Debug.LogError($"[{TAG}]: CloudDBZone is null, try re-open it"); return; } - mCloudDBZone.SubscribeSnapshot(cloudDBZoneQuery, cloudDBZoneQueryPolicy, listener); + + mRegister = mCloudDBZone.SubscribeSnapshot(cloudDBZoneQuery, cloudDBZoneQueryPolicy, OnCloudDBZoneSnapshot, OnCloudDBZoneSnapshotException); + Debug.Log($"[{TAG}]: SubscribeSnaphot()"); } - } } \ No newline at end of file diff --git a/Assets/Huawei/Scripts/Game/HMSAchievementsManager.cs b/Assets/Huawei/Scripts/Game/HMSAchievementsManager.cs index 5c107829..3ff70367 100644 --- a/Assets/Huawei/Scripts/Game/HMSAchievementsManager.cs +++ b/Assets/Huawei/Scripts/Game/HMSAchievementsManager.cs @@ -40,7 +40,7 @@ public void ShowAchievements() OnShowAchievementsSuccess?.Invoke(); }, (exception) => { - Debug.Log("[HMS GAMES:] ShowAchievements ERROR"); + Debug.LogError("[HMSAchievementsManager]: Show Achievements failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnShowAchievementsFailure?.Invoke(exception); }); } @@ -55,7 +55,7 @@ public void GetAchievementsList() OnGetAchievementsListSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] GetAchievementsList ERROR"); + Debug.LogError("[HMSAchievementsManager]: GetAchievementsList failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnGetAchievementsListFailure?.Invoke(exception); }); } @@ -71,7 +71,7 @@ public void RevealAchievement(string achievementId) }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] RevealAchievement ERROR"); + Debug.LogError("[HMSAchievementsManager]: RevealAchievement failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnRevealAchievementFailure?.Invoke(exception); }); } @@ -86,11 +86,16 @@ public void IncreaseStepAchievement(string achievementId, int stepIncrement) }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] IncreaseStepAchievement ERROR"); + Debug.LogError("[HMSAchievementsManager]: IncreaseStepAchievement failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnIncreaseStepAchievementFailure?.Invoke(exception); }); } + public void Grow(string achievementId, int stepIncrement) + { + achievementsClient.Grow(achievementId, stepIncrement); + } + public void SetStepAchievement(string achievementId, int stepsNum) { ITask task = achievementsClient.MakeStepsWithResult(achievementId, stepsNum); @@ -101,7 +106,7 @@ public void SetStepAchievement(string achievementId, int stepsNum) }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] SetStepAchievement ERROR"); + Debug.LogError("[HMSAchievementsManager]: SetStepAchievement failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnSetStepAchievementFailure?.Invoke(exception); }); } @@ -116,7 +121,7 @@ public void UnlockAchievement(string achievementId) }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] UnlockAchievements ERROR"); + Debug.LogError("[HMSAchievementsManager]: UnlockAchievement failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnUnlockAchievementFailure?.Invoke(exception); }); } diff --git a/Assets/Huawei/Scripts/Game/HMSGameManager.cs b/Assets/Huawei/Scripts/Game/HMSGameManager.cs index f09f4991..1ef1a6a2 100644 --- a/Assets/Huawei/Scripts/Game/HMSGameManager.cs +++ b/Assets/Huawei/Scripts/Game/HMSGameManager.cs @@ -11,10 +11,17 @@ public class HMSGameManager : HMSSingleton { public Action OnGetPlayerInfoSuccess { get; set; } public Action OnGetPlayerInfoFailure { get; set; } + public Action OnSubmitPlayerEventSuccess { get; set; } + public Action OnSubmitPlayerEventFailure { get; set; } + public Action OnGetPlayerExtraInfoSuccess { get; set; } + public Action OnGetPlayerExtraInfoFailure { get; set; } public Action SignInSuccess { get; set; } public Action SignInFailure { get; set; } private AccountAuthService authService; + private IBuoyClient buoyClient; + private IPlayersClient playersClient; + private IArchivesClient archivesClient; public void Start() { @@ -42,6 +49,7 @@ public void Init() }).AddOnFailureListener((exception) => { + Debug.Log("HMS GAMES: The app has not been authorized"); authService.StartSignIn(SignInSuccess, SignInFailure); InitGameManagers(); @@ -50,32 +58,75 @@ public void Init() public void InitGameManagers() { - //SavedGame Initilize HMSSaveGameManager.Instance.SavedGameAuth(); - HMSSaveGameManager.Instance.GetArchivesClient(); - //Leaderboard Initilize HMSLeaderboardManager.Instance.rankingsClient = Games.GetRankingsClient(); - //Achievements Initilize HMSAchievementsManager.Instance.achievementsClient = Games.GetAchievementsClient(); + + playersClient = Games.GetPlayersClient(); + archivesClient = Games.GetArchiveClient(); + buoyClient = Games.GetBuoyClient(); + } + + public void ShowFloatWindow() + { + buoyClient.ShowFloatWindow(); + } + + public void HideFloatWindow() + { + buoyClient.HideFloatWindow(); } public void GetPlayerInfo() { if (HMSAccountManager.Instance.HuaweiId != null) { - IPlayersClient playersClient = Games.GetPlayersClient(); ITask task = playersClient.CurrentPlayer; task.AddOnSuccessListener((result) => { - Debug.Log("[HMSP:] GetPlayerInfo Success"); + Debug.Log("[HMSGameManager] GetPlayerInfo Success"); OnGetPlayerInfoSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMSP:] GetPlayerInfo Failed"); + Debug.LogError("[HMSGameManager]: GetPlayerInfo failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnGetPlayerInfoFailure?.Invoke(exception); }); } } + + public void SubmitPlayerEvent(string playerId, string eventId, string eventType) + { + if (HMSAccountManager.Instance.HuaweiId != null) + { + var task = playersClient.SubmitPlayerEvent(playerId, eventId, eventType); + task.AddOnSuccessListener((result) => + { + Debug.Log("[HMSGameManager] SubmitPlayerEvent Success"); + OnSubmitPlayerEventSuccess?.Invoke(result); + }).AddOnFailureListener((exception) => + { + Debug.LogError("[HMSGameManager]: SubmitPlayerEvent failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); + OnSubmitPlayerEventFailure?.Invoke(exception); + }); + } + } + + public void GetPlayerExtraInfo(string transactionId) + { + if (HMSAccountManager.Instance.HuaweiId != null) + { + var task = playersClient.GetPlayerExtraInfo(transactionId); + task.AddOnSuccessListener((result) => + { + Debug.Log("[HMSGameManager] GetPlayerExtraInfo Success"); + OnGetPlayerExtraInfoSuccess?.Invoke(result); + }).AddOnFailureListener((exception) => + { + Debug.LogError("[HMSGameManager]: GetPlayerExtraInfo failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); + OnGetPlayerExtraInfoFailure?.Invoke(exception); + }); + } + } } } \ No newline at end of file diff --git a/Assets/Huawei/Scripts/Game/HMSLeaderboardManager.cs b/Assets/Huawei/Scripts/Game/HMSLeaderboardManager.cs index 6a741337..842bd7dd 100644 --- a/Assets/Huawei/Scripts/Game/HMSLeaderboardManager.cs +++ b/Assets/Huawei/Scripts/Game/HMSLeaderboardManager.cs @@ -38,12 +38,12 @@ public void IsUserScoreShownOnLeaderboards() ITask task = rankingsClient.GetRankingSwitchStatus(); task.AddOnSuccessListener((result) => { - Debug.Log("[HMS GAMES] isUserScoreShownOnLeaderboards SUCCESS" + result); + Debug.Log("[HMSLeaderboardManager] isUserScoreShownOnLeaderboards SUCCESS" + result); OnIsUserScoreShownOnLeaderboardsSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] isUserScoreShownOnLeaderboards ERROR"); + Debug.LogError("[HMSLeaderboardManager]: IsUserScoreShownOnLeaderboards failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnIsUserScoreShownOnLeaderboardsFailure?.Invoke(exception); }); @@ -54,12 +54,12 @@ public void SetUserScoreShownOnLeaderboards(int active) ITask task = rankingsClient.SetRankingSwitchStatus(active); task.AddOnSuccessListener((result) => { - Debug.Log("[HMS GAMES] SetUserScoreShownOnLeaderboards SUCCESS" + result); + Debug.Log("[HMSLeaderboardManager] SetUserScoreShownOnLeaderboards SUCCESS" + result); OnSetUserScoreShownOnLeaderboardsSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] SetUserScoreShownOnLeaderboards ERROR"); + Debug.LogError("[HMSLeaderboardManager]: SetUserScoreShownOnLeaderboards failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnSetUserScoreShownOnLeaderboardsFailure?.Invoke(exception); }); } @@ -69,9 +69,11 @@ public void SubmitScore(string leaderboardId, long score) ITask task = rankingsClient.SubmitScoreWithResult(leaderboardId, score); task.AddOnSuccessListener((scoreInfo) => { + Debug.Log("[HMSLeaderboardManager] SubmitScore SUCCESS"); OnSubmitScoreSuccess?.Invoke(scoreInfo); }).AddOnFailureListener((error) => { + Debug.LogError("[HMSLeaderboardManager]: SubmitScore failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSubmitScoreFailure?.Invoke(error); }); } @@ -81,9 +83,11 @@ public void SubmitScore(string leaderboardId, long score, string scoreTips) ITask task = rankingsClient.SubmitScoreWithResult(leaderboardId, score, scoreTips); task.AddOnSuccessListener((scoreInfo) => { + Debug.Log("[HMSLeaderboardManager] SubmitScore SUCCESS"); OnSubmitScoreSuccess?.Invoke(scoreInfo); }).AddOnFailureListener((error) => { + Debug.LogError("[HMSLeaderboardManager]: SubmitScore failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); OnSubmitScoreFailure?.Invoke(error); }); } @@ -92,12 +96,12 @@ public void ShowLeaderboards() { rankingsClient.ShowTotalRankings(() => { - Debug.Log("[HMS GAMES] ShowLeaderboards SUCCESS"); + Debug.Log("[HMSLeaderboardManager] ShowLeaderboards SUCCESS"); OnShowLeaderboardsSuccess?.Invoke(); }, (exception) => { - Debug.Log("[HMS GAMES] ShowLeaderboards ERROR"); + Debug.LogError("[HMSLeaderboardManager]: ShowLeaderboards failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnShowLeaderboardsFailure?.Invoke(exception); }); } @@ -107,11 +111,11 @@ public void GetLeaderboardsData() ITask> task = rankingsClient.GetRankingSummary(true); task.AddOnSuccessListener((result) => { - Debug.Log("[HMS GAMES] GetLeaderboardsData SUCCESS"); + Debug.Log("[HMSLeaderboardManager] GetLeaderboardsData SUCCESS"); OnGetLeaderboardsDataSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] GetLeaderboardsData ERROR"); + Debug.LogError("[HMSLeaderboardManager]: GetLeaderboardsData failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnGetLeaderboardsDataFailure?.Invoke(exception); }); } @@ -121,12 +125,12 @@ public void GetLeaderboardData(string leaderboardId) ITask task = rankingsClient.GetRankingSummary(leaderboardId, true); task.AddOnSuccessListener((result) => { - Debug.Log("[HMS GAMES] GetLeaderboardsData SUCCESS"); + Debug.Log("[HMSLeaderboardManager] GetLeaderboardsData SUCCESS"); OnGetLeaderboardDataSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] GetLeaderboardsData ERROR"); + Debug.LogError("[HMSLeaderboardManager]: GetLeaderboardData failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnGetLeaderboardDataFailure?.Invoke(exception); }); } @@ -139,12 +143,12 @@ public void GetScoresFromLeaderboard(string leaderboardId, int timeDimension, in task.AddOnSuccessListener((result) => { - Debug.Log("[HMS GAMES] GetScoresFromLeaderboard SUCCESS"); + Debug.Log("[HMSLeaderboardManager] GetScoresFromLeaderboard SUCCESS"); OnGetScoresFromLeaderboardSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("[HMS GAMES] GetScoresFromLeaderboard ERROR"); + Debug.LogError("[HMSLeaderboardManager]: GetScoresFromLeaderboard failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnGetScoresFromLeaderboardFailure?.Invoke(exception); }); } diff --git a/Assets/Huawei/Scripts/IAP/HMSIAPManager.cs b/Assets/Huawei/Scripts/IAP/HMSIAPManager.cs index 75fdd1d7..ca9bef82 100644 --- a/Assets/Huawei/Scripts/IAP/HMSIAPManager.cs +++ b/Assets/Huawei/Scripts/IAP/HMSIAPManager.cs @@ -11,7 +11,7 @@ namespace HmsPlugin { public class HMSIAPManager : HMSSingleton { - private static readonly HMSException IAP_NOT_AVAILABLE = new HMSException("IAP not available"); + private static readonly HMSException IAP_NOT_AVAILABLE = new HMSException("[HMSIAPManager] IAP not available"); public Action OnCheckIapAvailabilitySuccess { get; set; } public Action OnCheckIapAvailabilityFailure { get; set; } @@ -31,6 +31,12 @@ public class HMSIAPManager : HMSSingleton public Action OnObtainOwnedPurchasesSuccess { get; set; } public Action OnObtainOwnedPurchasesFailure { get; set; } + public Action OnObtainOwnedPurchaseRecordSuccess { get; set; } + public Action OnObtainOwnedPurchaseRecordFailure { get; set; } + + public Action OnIsSandboxActivatedSuccess { get; set; } + public Action OnIsSandboxActivatedFailure { get; set; } + private IIapClient iapClient; private bool? iapAvailable = null; private List productInfoList = new List(); @@ -47,7 +53,7 @@ public void CheckIapAvailability() ITask task = iapClient.EnvReady; task.AddOnSuccessListener((result) => { - Debug.Log("HMSP: checkIapAvailabity SUCCESS"); + Debug.Log("[HMSIAPManager] checkIapAvailabity SUCCESS"); iapAvailable = true; OnCheckIapAvailabilitySuccess?.Invoke(); ObtainProductInfo(HMSIAPProductListSettings.Instance.GetProductIdentifiersByType(HMSIAPProductType.Consumable), @@ -57,13 +63,13 @@ public void CheckIapAvailability() }).AddOnFailureListener((exception) => { - Debug.Log("[HMSPlugin]: Error on EnvReady"); + Debug.LogError("[HMSIAPManager]: Error on EnvReady"); IapApiException iapEx = exception.AsIapApiException(); iapEx.Status.StartResolutionForResult ( (intent) => { - Debug.Log("[HMSPlugin]: Success on iapEx Resolution"); + Debug.Log("[HMSIAPManager]: Success on iapEx Resolution"); OnCheckIapAvailabilitySuccess?.Invoke(); ObtainProductInfo(HMSIAPProductListSettings.Instance.GetProductIdentifiersByType(HMSIAPProductType.Consumable), HMSIAPProductListSettings.Instance.GetProductIdentifiersByType(HMSIAPProductType.NonConsumable), @@ -74,7 +80,7 @@ public void CheckIapAvailability() iapClient = null; iapAvailable = false; - Debug.Log("[HMSPlugin]: ERROR on StartResolutionForResult: " + ex.WrappedCauseMessage + " " + ex.WrappedExceptionMessage); + Debug.LogError("[HMSIAPManager]: ERROR on StartResolutionForResult: " + ex.WrappedCauseMessage + " " + ex.WrappedExceptionMessage); OnCheckIapAvailabilityFailure?.Invoke(exception); } ); @@ -121,20 +127,20 @@ private void ObtainProductInfo(IList productIdNonConsumablesList, PriceT iapClient.ObtainProductInfo(productInfoReq).AddOnSuccessListener((type) => { - Debug.Log("[HMSPlugin]:" + type.ErrMsg + type.ReturnCode.ToString()); - Debug.Log("[HMSPlugin]: {0=Consumable} {1=Non-Consumable} {2=Subscription}"); - Debug.Log("[HMSPlugin]: Found " + type.ProductInfoList.Count + " type of " + priceType.Value + " products"); + Debug.Log("[HMSIAPManager]:" + type.ErrMsg + type.ReturnCode.ToString()); + Debug.Log("[HMSIAPManager]: {0=Consumable} {1=Non-Consumable} {2=Subscription}"); + Debug.Log("[HMSIAPManager]: Found " + type.ProductInfoList.Count + " type of " + priceType.Value + " products"); foreach (var productInfo in type.ProductInfoList) { if (!productInfoList.Exists(c => c.ProductId == productInfo.ProductId)) productInfoList.Add(productInfo); - Debug.Log("[HMSPlugin]: ProductId: " + productInfo.ProductId + ", ProductName: " + productInfo.ProductName + ", Price: " + productInfo.Price); + Debug.Log("[HMSIAPManager]: ProductId: " + productInfo.ProductId + ", ProductName: " + productInfo.ProductName + ", Price: " + productInfo.Price); } OnObtainProductInfoSuccess?.Invoke(new List { type }); }).AddOnFailureListener((exception) => { - Debug.Log("[HMSPlugin]: ERROR non Consumable ObtainInfo" + exception.Message); + Debug.LogError("[HMSIAPManager]: ObtainProductInfo failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnObtainProductInfoFailure?.Invoke(exception); }); } @@ -153,18 +159,18 @@ public void ConsumeOwnedPurchases() ITask task = iapClient.ObtainOwnedPurchases(ownedPurchasesReq); task.AddOnSuccessListener((result) => { - Debug.Log("HMSP: recoverPurchases"); + Debug.Log("[HMSIAPManager] recoverPurchases"); foreach (var inAppPurchaseData in result.InAppPurchaseDataList) { ConsumePurchaseWithPurchaseData(inAppPurchaseData); - Debug.Log("HMSP: recoverPurchases result> " + result.ReturnCode); + Debug.Log("[HMSIAPManager] recoverPurchases result> " + result.ReturnCode); } OnRecoverPurchasesSuccess?.Invoke(); }).AddOnFailureListener((exception) => { - Debug.Log($"HMSP: Error on recoverPurchases {exception.StackTrace}"); + Debug.LogError("[HMSIAPManager] ConsumeOwnedPurchases failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnRecoverPurchasesFailure?.Invoke(exception); }); @@ -199,12 +205,12 @@ public void ConsumePurchaseWithToken(string token) task.AddOnSuccessListener((result) => { - Debug.Log("HMSP: consumePurchase"); + Debug.Log("[HMSIAPManager] consumePurchase"); OnConsumePurchaseSuccess?.Invoke(); }).AddOnFailureListener((exception) => { - Debug.Log("HMSP: Error on consumePurchase"); + Debug.LogError("[HMSIAPManager] ConsumePurchaseWithToken failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnConsumePurchaseFailure?.Invoke(exception); }); @@ -219,7 +225,7 @@ public void BuyProduct(string productId, bool consumeAfter = true, string payloa } else { - Debug.LogError($"[HMSPlugin->HMSIAPManager]: Specified: {productId} could not be found in retrieved product list!"); + Debug.LogError($"[HMSIAPManager] Specified: {productId} could not be found in retrieved product list!"); } } @@ -243,20 +249,17 @@ public void InternalBuyProduct(ProductInfo productInfo, bool consumeAfter = true { if (result != null) { - Debug.Log("[HMSPlugin]:" + result.ErrMsg + result.ReturnCode.ToString()); - Debug.Log("[HMSPlugin]: Buying " + purchaseIntentReq.ProductId); + Debug.Log("[HMSIAPManager]:" + result.ErrMsg + result.ReturnCode.ToString()); + Debug.Log("[HMSIAPManager]: Buying " + purchaseIntentReq.ProductId); Status status = result.Status; status.StartResolutionForResult((androidIntent) => { PurchaseResultInfo purchaseResultInfo = iapClient.ParsePurchaseResultInfoFromIntent(androidIntent); - Debug.Log("HMSPluginResult: " + purchaseResultInfo.ReturnCode); - Debug.Log("HMSErrorMsg: " + purchaseResultInfo.ErrMsg); - if (purchaseResultInfo.ReturnCode == OrderStatusCode.ORDER_STATE_SUCCESS) { - Debug.Log("HMS: HMSInAppPurchaseData" + purchaseResultInfo.InAppPurchaseData); - Debug.Log("HMS: HMSInAppDataSignature" + purchaseResultInfo.InAppDataSignature); + Debug.Log("[HMSIAPManager] HMSInAppPurchaseData" + purchaseResultInfo.InAppPurchaseData); + Debug.Log("[HMSIAPManager] HMSInAppDataSignature" + purchaseResultInfo.InAppDataSignature); OnBuyProductSuccess.Invoke(purchaseResultInfo); if (consumeAfter) ConsumePurchase(purchaseResultInfo); @@ -266,19 +269,19 @@ public void InternalBuyProduct(ProductInfo productInfo, bool consumeAfter = true switch (purchaseResultInfo.ReturnCode) { case OrderStatusCode.ORDER_STATE_CANCEL: - Debug.Log("[HMS]: User cancel payment"); + Debug.LogError("[HMSIAPManager] User cancel payment"); break; case OrderStatusCode.ORDER_STATE_FAILED: - Debug.Log("[HMS]: order payment failed"); + Debug.LogError("[HMSIAPManager] order payment failed"); break; case OrderStatusCode.ORDER_PRODUCT_OWNED: - Debug.Log("[HMS]: Product owned"); + Debug.LogError("[HMSIAPManager] Product owned"); break; default: - Debug.Log("[HMS:] BuyProduct ERROR" + purchaseResultInfo.ReturnCode); + Debug.LogError("[HMSIAPManager] BuyProduct failed. ReturnCode: " + purchaseResultInfo.ReturnCode + ", ErrorMsg: " + purchaseResultInfo.ErrMsg); break; } OnBuyProductFailure?.Invoke(purchaseResultInfo.ReturnCode); @@ -286,14 +289,14 @@ public void InternalBuyProduct(ProductInfo productInfo, bool consumeAfter = true }, (exception) => { - Debug.Log("[HMSPlugin]:startIntent ERROR"); + Debug.LogError("[HMSIAPManager] startIntent ERROR"); }); } }).AddOnFailureListener((exception) => { - Debug.Log("[HMSPlugin]: ERROR BuyProduct!!" + exception.Message); + Debug.LogError("[HMSIAPManager]: BuyProduct failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); }); } @@ -306,7 +309,7 @@ public void ObtainOwnedPurchases() } - Debug.Log("HMSP: ObtainOwnedPurchaseRequest"); + Debug.Log("[HMSIAPManager] ObtainOwnedPurchaseRequest"); ObtainOwnedPurchases(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_CONSUMABLE }); ObtainOwnedPurchases(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_NONCONSUMABLE }); ObtainOwnedPurchases(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_SUBSCRIPTION }); @@ -317,20 +320,53 @@ private void ObtainOwnedPurchases(OwnedPurchasesReq ownedPurchasesReq) ITask task = iapClient.ObtainOwnedPurchases(ownedPurchasesReq); task.AddOnSuccessListener((result) => { - Debug.Log("HMSP: ObtainOwnedPurchases"); + Debug.Log("[HMSIAPManager] ObtainOwnedPurchases"); foreach (var item in result.InAppPurchaseDataList) { - Debug.Log("[HMSPlugin]: ProductId: " + item.ProductId + ", ProductName: " + item.ProductName + ", Price: " + item.Price); + Debug.Log("[HMSIAPManager] ProductId: " + item.ProductId + ", ProductName: " + item.ProductName + ", Price: " + item.Price); } OnObtainOwnedPurchasesSuccess?.Invoke(result); }).AddOnFailureListener((exception) => { - Debug.Log("HMSP: Error on ObtainOwnedPurchases"); + Debug.LogError("[HMSIAPManager]: ObtainOwnedPurchases failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnObtainProductInfoFailure?.Invoke(exception); }); } + public void ObtainOwnedPurchaseRecord() + { + if (iapAvailable != true) + { + OnObtainOwnedPurchaseRecordFailure?.Invoke(IAP_NOT_AVAILABLE); + return; + } + + Debug.Log("HMSP: ObtainOwnedPurchaseRecord"); + ObtainOwnedPurchaseRecord(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_CONSUMABLE }); + ObtainOwnedPurchaseRecord(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_NONCONSUMABLE }); + ObtainOwnedPurchaseRecord(new OwnedPurchasesReq() { PriceType = PriceType.IN_APP_SUBSCRIPTION }); + } + + private void ObtainOwnedPurchaseRecord(OwnedPurchasesReq req) + { + ITask task = iapClient.ObtainOwnedPurchaseRecord(req); + task.AddOnSuccessListener((result) => + { + Debug.Log("HMSP: ObtainOwnedPurchaseRecord"); + foreach (var item in result.InAppPurchaseDataList) + { + Debug.Log("[HMSPlugin]: ProductId: " + item.ProductId + ", ProductName: " + item.ProductName + ", Price: " + item.Price); + } + OnObtainOwnedPurchaseRecordSuccess?.Invoke(result); + + }).AddOnFailureListener((exception) => + { + Debug.Log("HMSP: Error on ObtainOwnedPurchaseRecord"); + OnObtainOwnedPurchaseRecordFailure?.Invoke(exception); + }); + } + public void RestorePurchases(Action action) { OnObtainOwnedPurchasesSuccess = (ownedPurchaseResult) => @@ -344,7 +380,7 @@ public void RestorePurchases(Action action) OnObtainOwnedPurchasesFailure = (error) => { - Debug.Log("[HMSPlugin:] RestorePurchasesError" + error.Message); + Debug.LogError("[HMSIAPManager]: RestorePurchasesError failed. CauseMessage: " + error.WrappedCauseMessage + ", ExceptionMessage: " + error.WrappedExceptionMessage); }; ObtainOwnedPurchases(); @@ -359,5 +395,26 @@ public bool IsNullOrEmpty(List array) { return (array == null || array.Count == 0); } + + public void IsSandboxActivated() + { + if (iapClient != null) + { + var task = iapClient.SandboxActivated; + task.AddOnSuccessListener((result) => + { + Debug.Log("[HMSIAPManager]: IsSandboxActivated success!"); + OnIsSandboxActivatedSuccess?.Invoke(result); + }).AddOnFailureListener((exception) => + { + Debug.LogError("[HMSIAPManager]: IsSandboxActivated failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); + OnIsSandboxActivatedFailure?.Invoke(exception); + }); + } + else + { + Debug.LogError("[HMSIAPManager]: IsSandboxActivated failed. IAP is not initialized."); + } + } } } \ No newline at end of file diff --git a/Assets/Huawei/Scripts/RemoteConfig/HMSRemoteConfigManager.cs b/Assets/Huawei/Scripts/RemoteConfig/HMSRemoteConfigManager.cs index d54e20da..cc3fdd56 100644 --- a/Assets/Huawei/Scripts/RemoteConfig/HMSRemoteConfigManager.cs +++ b/Assets/Huawei/Scripts/RemoteConfig/HMSRemoteConfigManager.cs @@ -72,10 +72,12 @@ public void Fetch() ITask x = agc.Fetch(); x.AddOnSuccessListener((configValues) => { + Debug.Log("[HMSRemoteConfigManager] Fetch success."); OnFecthSuccess?.Invoke(configValues); }); x.AddOnFailureListener((exception) => { + Debug.LogError("[HMSRemoteConfigManager]: Fetch failed. CauseMessage: " + exception.WrappedCauseMessage + ", ExceptionMessage: " + exception.WrappedExceptionMessage); OnFecthFailure?.Invoke(exception); }); } diff --git a/Assets/Huawei/VERSION b/Assets/Huawei/VERSION index 703cec9e..6a0ca2d5 100644 --- a/Assets/Huawei/VERSION +++ b/Assets/Huawei/VERSION @@ -1 +1 @@ -2.0.6 \ No newline at end of file +2.0.7 \ No newline at end of file