From 2717891141446df653648d38745ec9de977415f0 Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Wed, 19 Aug 2020 15:38:50 -0700 Subject: [PATCH] Fix splash screen loading on Android --- platform/android/export/export.cpp | 91 +++++++++++++++++- platform/android/java/app/AndroidManifest.xml | 2 +- .../android/java/app/res/drawable/splash.png | Bin 0 -> 14766 bytes .../java/app/res/drawable/splash_bg_color.png | Bin 0 -> 1360 bytes .../java/app/res/drawable/splash_drawable.xml | 12 +++ .../android/java/app/res/values/themes.xml | 9 ++ .../java/app/src/com/godot/game/GodotApp.java | 7 ++ 7 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 platform/android/java/app/res/drawable/splash.png create mode 100644 platform/android/java/app/res/drawable/splash_bg_color.png create mode 100644 platform/android/java/app/res/drawable/splash_drawable.xml create mode 100644 platform/android/java/app/res/values/themes.xml diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 95b778caf6..fd1a710e4c 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -44,6 +44,7 @@ #include "editor/editor_log.h" #include "editor/editor_node.h" #include "editor/editor_settings.h" +#include "main/splash.gen.h" #include "platform/android/export/gradle_export_util.h" #include "platform/android/logo.gen.h" #include "platform/android/plugin/godot_plugin_config.h" @@ -200,6 +201,9 @@ static const char *android_perms[] = { nullptr }; +static const char *SPLASH_IMAGE_EXPORT_PATH = "res/drawable/splash.png"; +static const char *SPLASH_BG_COLOR_PATH = "res/drawable/splash_bg_color.png"; + struct LauncherIcon { const char *export_path; int dimensions; @@ -1433,6 +1437,18 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { //printf("end\n"); } + void _load_image_data(const Ref &p_splash_image, Vector &p_data) { + Vector png_buffer; + Error err = PNGDriverCommon::image_to_png(p_splash_image, png_buffer); + if (err == OK) { + p_data.resize(png_buffer.size()); + memcpy(p_data.ptrw(), png_buffer.ptr(), p_data.size()); + } else { + String err_str = String("Failed to convert splash image to png."); + WARN_PRINT(err_str.utf8().get_data()); + } + } + void _process_launcher_icons(const String &p_file_name, const Ref &p_source_image, int dimension, Vector &p_data) { Ref working_image = p_source_image; @@ -1452,6 +1468,35 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { } } + void load_splash_refs(Ref &splash_image, Ref &splash_bg_color_image) { + // TODO: Figure out how to handle remaining boot splash parameters (e.g: fullsize, filter) + String project_splash_path = ProjectSettings::get_singleton()->get("application/boot_splash/image"); + + if (!project_splash_path.empty()) { + splash_image.instance(); + const Error err = ImageLoader::load_image(project_splash_path, splash_image); + if (err) { + splash_image.unref(); + } + } + + if (splash_image.is_null()) { + // Use the default + splash_image = Ref(memnew(Image(boot_splash_png))); + } + + // Setup the splash bg color + bool bg_color_valid; + Color bg_color = ProjectSettings::get_singleton()->get("application/boot_splash/bg_color", &bg_color_valid); + if (!bg_color_valid) { + bg_color = boot_splash_bg_color; + } + + splash_bg_color_image.instance(); + splash_bg_color_image->create(splash_image->get_width(), splash_image->get_height(), false, splash_image->get_format()); + splash_bg_color_image->fill(bg_color); + } + void load_icon_refs(const Ref &p_preset, Ref &icon, Ref &foreground, Ref &background) { String project_icon_path = ProjectSettings::get_singleton()->get("application/config/icon"); @@ -1479,13 +1524,34 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { } void store_image(const LauncherIcon launcher_icon, const Vector &data) { - String img_path = launcher_icon.export_path; - img_path = img_path.insert(0, "res://android/build/"); + store_image(launcher_icon.export_path, data); + } + + void store_image(const String &export_path, const Vector &data) { + String img_path = export_path.insert(0, "res://android/build/"); store_file_at_path(img_path, data); } - void _copy_icons_to_gradle_project(const Ref &p_preset, const Ref &main_image, - const Ref &foreground, const Ref &background) { + void _copy_icons_to_gradle_project(const Ref &p_preset, + const Ref &splash_image, + const Ref &splash_bg_color_image, + const Ref &main_image, + const Ref &foreground, + const Ref &background) { + // Store the splash image + if (splash_image.is_valid() && !splash_image->empty()) { + Vector data; + _load_image_data(splash_image, data); + store_image(SPLASH_IMAGE_EXPORT_PATH, data); + } + + // Store the splash bg color image + if (splash_bg_color_image.is_valid() && !splash_bg_color_image->empty()) { + Vector data; + _load_image_data(splash_bg_color_image, data); + store_image(SPLASH_BG_COLOR_PATH, data); + } + // Prepare images to be resized for the icons. If some image ends up being uninitialized, // the default image from the export template will be used. @@ -2195,6 +2261,10 @@ public: bool apk_expansion = p_preset->get("apk_expansion/enable"); Vector enabled_abis = get_enabled_abis(p_preset); + Ref splash_image; + Ref splash_bg_color_image; + load_splash_refs(splash_image, splash_bg_color_image); + Ref main_image; Ref foreground; Ref background; @@ -2247,7 +2317,7 @@ public: EditorNode::add_io_error("Unable to overwrite res://android/build/res/*.xml files with project name"); } // Copies the project icon files into the appropriate Gradle project directory. - _copy_icons_to_gradle_project(p_preset, main_image, foreground, background); + _copy_icons_to_gradle_project(p_preset, splash_image, splash_bg_color_image, main_image, foreground, background); // Write an AndroidManifest.xml file into the Gradle project directory. _write_tmp_manifest(p_preset, p_give_internet, p_debug); @@ -2448,6 +2518,17 @@ public: if (file == "resources.arsc") { _fix_resources(p_preset, data); } + + // Process the splash image + if (file == SPLASH_IMAGE_EXPORT_PATH && splash_image.is_valid() && !splash_image->empty()) { + _load_image_data(splash_image, data); + } + + // Process the splash bg color image + if (file == SPLASH_BG_COLOR_PATH && splash_bg_color_image.is_valid() && !splash_bg_color_image->empty()) { + _load_image_data(splash_bg_color_image, data); + } + for (int i = 0; i < icon_densities_count; ++i) { if (main_image.is_valid() && !main_image->empty()) { if (file == launcher_icons[i].export_path) { diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml index 48c09552c1..e94681659c 100644 --- a/platform/android/java/app/AndroidManifest.xml +++ b/platform/android/java/app/AndroidManifest.xml @@ -38,7 +38,7 @@ iV_;yIRn}C%z+hSG>EaktaqG>&Mg|53 zhK2=ySBkG>0x?JNun&QRZ||6PtXlp4`;R*L@6TVBPQUnl-@A8RSMGYVuB`UHE6W`^ z$I09IqSR6*mkBC6td9skdS|(R_rK!FGi$HUaVXm4U!-vV{F(eVMa$}wbt!)>tKXLP zP5Qz-eScBqg{Q334fXDOCRN|xXjXNrYQyrk@+=JJY#A6BChdFv$z1RJjy2_(g&%W^ zEcH8P#BP3m%kK5zUGwbzZvAR#Va>?Ez%b#9_jK)8yMmQr|JU#+rCksCAM*Xn)n9*3 zgQCSDYx0-m>8oR}?bxDiSTCGd|1YdF^S$KZt7gj-OhF1Je95-0)_S(%%F6j#Qn$9e zbJ*E8H*1Re^>vbg`#*^!y|p-f1`hS zia!6VWtP!j)(4xND7ruCZI|c1)ygmKn{sV5TeJ3F*;@W<)APSiUw!ZE+WBR>eF}ai zf~-~esq**GQ^)B}a~(5dyTfwzFFi@!ZITw%ru*ly+UtT=8+EqLC$^uzWh#=C`{nAt z6)UAnu0P6++VgTr-xTu|@?6!=9*BdS)9_?MNvC(O-{M^>?{@Ls-B~eP_ucQQg~dfz zE?(6=&+ORrW;55zH+?UsRa*Xicm4-!Wz?+b1ybhIj8|;5}U{Vn55$otuSb!l6*qin8r?wNMo?(yEz)9dC2%+Jv=Q zGW(t0MQph$_GIF-LtAui-ri(0nf=1?xS*_rWYWCCv5Rllt|` z{#V+zocnFhcX)St_j>+GA(8Gikd`b~DtP7)AZMUHY2c z)!tQkjcnSs%M~*JZr)fu4d PH#j$rs#fHUzI-jmesB)E54n}i~am=*^;mMw{AIq zI>WyR6c7%VW^+}h-<`Nb_k-^0a*@^g8zX$C+1*H=e9K&VcY2zDEXa+M;sQ_ndGpva z_DQ^X_U30PGMByQzrDU!KJWV0_qo&NiW;RwxxIgXWB%LsZ_>Y6f7|^{@^?GX*P(mNJ!M+1?v&>f6|6w!s@z>N;Vb(o_Z-Ge4iMhn^ld#}J+=E! z9jD9lewy|9&!fXV@e|A+aS2El%NS1Isb?>L#OD8rrwiv*r%6@4d#c|Q0tz&bUo*Yu zJ<=|beEw-JW8CNb7(cDPUDNpP8tIoW5mm@LV`*0Q^FHLRZS|6W74DVavFG6>UH>yrXa7yz_2_M{^6DQStTYHlDDJTYCEbtM_sIMJLbXq{>U)ka>S%{YBaCZO8WB+hJ+BDl>2T@~cn% zn-_wD$m7@gfBTo+eppeif3NJA>!&BFyF+3wuerSOc;~Zp`Rf{8U5v+{<0sd)H5_#ztE!K6{py zl%BqR^aCo9}c3S$$X@6S8 zPMV)Td-2;JsjsWDaz4wkOZl8=VXd?hy(PYB`HHZ|&(+JyysG>fA64jkh=DX-68)58 z8MZVqnEm^S3)0zqS?P|w>uU3jTb++=wA{LL?x&{*9c?eAeYbdCG4;_79Z&=;QhQmy z^NQAz6}xVl+4V1AwVi$E?Y!!&n1AUYSr^w!-($>vR&%=DdmNPV=+K^u^xaQ()!2jN z7Ad@pth^Ulp3h-CG*{?CB;0c|}Qcb@h8IpR>o- zNr4muPX1D@x0cH?=H7yhmyOSVJZdg!t?SJ0_3CM6>Cd?eksvjm<)=31WIwdr$Dm%; z|9FS8hZ#6By#8O^)31NOwoh+g=iS>gYN7-|ik%%Vt&j23O1Zdf^79u=b8hVYDzfX( zY>1bcClM_EOS@ohq{Mv&+Q0v44wSRFXZLhQumU>Z*-sE zd366+O7dpITM^QCXIS68k;|8(m*Xerb3d`zWD4tv&!Ct$n4)4k{S8w}$ocGe@7GaR z;;lbrn-nJAi;SE}Tp2&b6zG98vUdDE{r}-6Hq}L| zt(Wne&A+l@^M(%_?CN)@-aod$MMi7&^{<=Ff*TkZ7#8f;aCjHJDc1DtTd6g^?pmdR zQP(1aYa-&;o^KAld?l}V#u=t3Hy^}+JjgZS_Os`=?ATpXKVS6fomEv<^Et6U#`P#) z=bQ}+{Y*>rLFO^+e6u!Z>XmITN@mTTy*2M{mG4ZW(0<>#n0`B}$n|@_?Yg!ma`CQR zR!29dc-Ng0SMVQZOs1ri`PutYVM<1VzYy}CRBi8gK<-p z`^I0Fu3lZ*Z|8NL^?Ce?{r`8@cgzm_ZxyvU{cKot^z1{sk~dDdH^Z*3Zr%Rp&TH4M zo%Qvej&$(+$9q3Cbx(QsY{~B3(Y28~*LE-+VP{}q;F>V|S3{hx@<% z%C&R;{GGW69&cqjyHB<2@Y!5NRu2gV1_lj>Q?H^# z&tF<9f1AmA;h8xqDr%s=~`ue*=w_1LcKfNvOU#;i9{P#`KcjZDm zw|!k19vM0FtL4LwaU~Cr?!Eu($D6lFA_@!)304J0o89EE+B0+J%&zB}=EuQW3p5-q?Xz1`k>=ws{if;8 zxBiy>D?KvyA4@)6_R>c#exLQiTGeaI<0i}3=3IE}>pfetUT?ph3nQrPa%TK=uWfPH z^UmY*Wxh1sF}=MFt`Y`t|$bKid5JA>14{ z;eOTWwXd#TxRv;JsTX6?#^C$Px(;hHx}QHi{|%hp8ABoo)Am_2=S#n^kc? zLwz;F8$@>4eciB+uWHZb<>v#C%obmsx^nO4=zaP7|CU|g{-i3e7r0*k`;=udjGM~x zS60=2IN07S_x{&c=_i|+<@D#xbOn2XYr?%Jb650LGyS?@_*{LD#Q)>uDM&zSt@`!7z-FGYtJ$s-TdOOE2sX6`xSqA zzpl!Dxq7C)-PSCP zHDv$s>gRLIZ_1n$|NIN;bpd_(r%$x!efw5+cAl;K;(w(j^SM9P|2kfO?TY5*D>rVe zh|_%=J8Or*`E_$Qv35M&_H$=e)@z=6;YFIk%Wlp1CA0qQ(K(jIkLx}sPRlv@{q{lz zNP$*wRqKu}@d;8A;Fnl~lZG^MYf~PCPqh z=MHtOM$yk`>9@X-v$lPkuyuK)bl~rXXYYUEE{w{t~v(w`K8+UHVxHdptndV-{d(=&S<4!~6WsvlDqOEy(j(_8&V(u?r z_Zj8dMy{Pa)pu29Ubs(l`Ko=Un%&={pFMr$;JJ6#u4FH<-QWIAvdY%hOy00lQb&64 zUG3fJW$)j}Eqg9?l@H^Gd_vS*oo4Tcw|ywr?`6bDXE9e|zcm>oObeUtjgs z^^{di;_NF^|IUhMTbBdwK_VRgU^}V?|+kbA&_sTiEGuLMO zp+jbiZnu@(o?%xO2%X7}#TNP_xCEU#x9!^Z0;ejPjCU&h}myXm?1s=RIPQK$O?QX9ZNR|F}W5)Yd4sI50 zvzlvAJY3!8b5D&(?U>c^r-Sslz;BJ`^DVJg+BYz!`^mo>D^lGJ^5G1l-Seh zxo(zhvxVoMjh&La=0=#xdFF!wpn65cH|WIl>P4{;{;|~o`!wU_dbaRZYlr^veRT5n zlYQG)=v^|rG3Up!wYDOe(%-z|&i_cz02Muxj%lS-A7N*;+g`Q4X0w@0@0Q+M&%Q00 zZ<=(SXX9owrM>&0K~W}p?Ub>WgcrDJem|gNuBqVDMc)^GnfvMHOvP^}CcdrSaQ6B) zwiSk#jf8gnTbiH7e=_rR*o?|GZ(G)-CT}&o4Q&I~n3V_iEnK!Tc3wPxn-I89wOh}Z zYv;GUXAghsim~okzh_^l`)TQ%gX?>omw&mrPDuCU$?I!)kH0Zg-5zmYS}&&L{-n2` zZl*8NbFjM|sdN9YciE5Dmai9oWz}x0yCDG`4JwR?`&xbYjqWFtTYLH2K#gUE%*9Uk zB82bC@oJ~F-KrL}f0Vj0n{TTI_raI(vXj)o4eqw)CFvrYUV5aaaNiFMHea!DtF!aV zlcLp&^c?P(mS<~R-CmOMoTwVP3b*} zR{WWn^Dle9VW-zO&KK;Ui#ku_PoR&<0ZN&tNP*v{aK!y?%xZ2`sp*sLlSwD74#_KG%ZNJ!n zyA&%OF7?OqX)jr^D^mQ-37gYm_n#cvq9b~J%ZcI(Pu)RjaDtY~-<{suowmuW{u0mW z9c1zC)#EqHqMu53{|N<|y+q2>`02*pYw5?C=B&9Fx5Q!@D04YzP5NRy-S(5t8M}i_ z_D45YT=qP=@$}Q>U=vrV{1u;GQ@QU(>>|U<6*Agallo88Zdx2sD6;dp~~Li`X)iDPczO^+&l{ zE3$%Qw(8Z3&B+BT+5fUAXx_SaGp0Qg<2mekKjqC9p0lT|)}33IceL=(Q}d?HqTm#6 zzw3!cU-ELP()*L%im*9PVYj=r@Udv`tHWv2{|n4{3(8aTnz^2@6EOT@igXW7ueAAO`6?1Jt-Hqo(pr#!|K+B8Wdf_{Bg6yYU+j`^Vt8X)|by(f_aA=E8^`294 ziEEUf@^-C^H`^7HS^UP=8srMk{qK!VFOB@0@I3O3=Blg5D_N@^POkm7_JHMA-geQ* z)1SDuZeMZk*s8j$;-5F3o(H*yAzkg|{hdBVCktL)W4L0nUHf^()Y{+$E3^4u-Q(Z> zdeiox@3SYJzJDvDcFVq~`D@>svGGngd$DSIr`~@v4<4|k|BpV6o8GGz>lF~|-TrO* zm76mqqIRx5@ombBspr4nW~}{oDk}ExJGHs;4`03!KXYPB_N}dJd9zP{%Za#sjs11^ zSI_1PFDJb%>OWo22Qtsa`_lRty~4`dPd7|juy=FxRo}N-EAqDO6%(`8xwt4-ef8Rk z4L9aj|KIoh`y1nLk-OU_J(+MiT2FlUA0r9KaOdCe^LXC`#~8&*mA=b(BY9a`FZ@;n z*t07aKktp&|F&rF>2AH#F=e~AXqIl>_2$)0i+@e0OZE1bPTRK=G#t^ei5EIqepYPUTi)0uA^r~mVWOPHILKY+8(FdrS!i}jasI&eA=ZA z^(Qmem_%d=IY=Gbxa~@)l&S)Z`4I1}NC!dVjo^x~4_a#4r zLi?fw?25O~vk!Z_Mzi$85r^D0GtLF(toJZ3I`droWu$F+*Sz@Xta$}@_Aafx^8cjk z3yrOX6Si#MvUJNF6OXJZmn^NkZh2SUU9<6LNYtFe7J3uyrsrMW{M+mCk|@KY+n4>m zXM5%1xgOSepkR>bS6t^2*!XQ~NUF~9*;)TtzFyWpIA@lJ^@{h$mwGLZ5%c_RVXS<$ z+w!08p+h^h)Iz=Fvtsgs;&*%2+RU5JJcrX{-u(Nk&Kh6+7I4@?ef8a*kf$r}fil8^ zBMCPD7B70DcrtKmgG~R5`wtDDT?uP_TKMYu_Zh`M)&68xEtV*HAvtUAs+O;jJCZJ$ z8XQ`%V88jZMfW~V_%%yRq;ucy?3meh-aeq_-U5~co2nHOJJ+|g1}xRS*IT?w`R%H0 z|2-_G>tB6;>)1}2s7Fqw%6A`z9rH4=-@Rk%Ora;W*@n-&&)3goVlD~*4>2_SykYxj zZ{HEsC<&=m)4gYQSF0a!of4*(j{P3!f z74gevym~HJpZ`6E>r2E0knV<`8S4%`cIDsRT%v2VUY0k`VEZ+mqox-RHB>C?`DA5q z?B~xV?Uwc{Zb&_!ad^fQi3!)6i$IMv1NlprlKduJ+WdR=UYq>&m0kI(`q_>oq&|>& z{PX4|(W7$WZ_e+!dRXRDgrX|jlWvezNi3fOujlUkutnh4nvOl&49w-f{faI8W^ABv z&r>GT#Qyd1{ht!Q6;-{}*|}z>5c8*GkR}1~nLf{Q`u|U=b8U2ey`|&y^O`HmySC44 zWc=utba;WsoBp-ErTgUOrpEdCd+N!9a*=@Wn!20^m5jU77%jJ6*nHn3R8uQPe^n=& z%P;507gu)t-0Atpa8|ygOt7!r;owQfy%`x87>+PJTfCO5H{M3C>6v&@dviM zix?-$oh`28^Z4>2rMgzO)V{;6T3eLu6sVcVAS(I2DvsrDc*DwBkLLOAjQe=CK|D0187N!gy~8`BT%F3$m(UZBmbSuwHPg)zEpUHSRtu}K-d#tM^;J)a`; zJUv?8&%pS?XThJPm(urd_zNmRPqp0WzdKj`?sBDU`Ap`_T_&zk(YJzY@2@z&|8!7; zd|<=MtflGV$EIAC?)shab>q@4`?gH~_rLU=>dzTm2aJV{6sBI9eyOLW>-PJi%Hyv8 z)9%ms760Pd{9E^Jl9*2m`{rz1j&VKif2}~a6-v~JS$*;QGdG*W9n2+-W5AQa)ub$#i z_b1v;cInkAmp$KYo)K2w_GH5K+1K10EMs5zWSJ&gYW0;HA9=`DZ?NN*Lf>JKEe%4F z6Q(9<=)4cyeU__dd2q$WJN>`zx3gSS*(>{!@91TV<1%5};%Wt(g$xxgT3(%Ac5#1X z!kp{-BKMud3R52v{zG`{wcI&y&!rKG!QQO!+ znaJVj3H7$4SKr#b5fA4P?#+Lf7oM=NqU&k->t;sI{r7o!KmSrXU0%_<&~o3B13#~v z$!#_^nS6TsQbtgUEvSCLyM6nafa+Y^liA{jlM1&hJ<7<6*irXtBIC-Zabe~$Q!~PR z{oYGSo!sWy^HlBI?Q;eSpb^bFwiL_5`}O9(y0~pqckicP3vawlsj9O-yjw!*cY?#A z_dik&H`SCJDZhT;)wF`6)msi`JzVa#F($MP?B)YsDlU6%y?S|ZZmPb7Xji&K&GETw z@;-MHclUF(nGfNnRY#w zTwHPO(}{*HMkegmu3t9p3Y1^Z&L$CeI zyv;B-F~mdu^-RV}#dF`=WA?dyF0MX&f9CVvq*Vt%!y*orQWN-lyH;|_NltKdbN#rr z&9K+7>!rS}-@z&GqBWHnt`Gfj-l#(;VIzoO->f!|Aut;-8iZ0`qd0OUI^x^&iON-@oF- zMuGRLxoeqTvDlW+{<7#x@0Jy_zCHJP@40=qu4PqS(KI_XNztRnC8Z|txf#a3pUhae z+QqFhR`BA#Qn$~WCqImk%M`i%WRo!{RvFekFwt5T^(?|dHvi)MFC|yzO8oj+-&7d~rhBbMc#qJ83DomOo6{z56 zn)Tn{@S?4~f%mpor8(po8Y!f^ZmC~R)tzI?7d6Bg04!G6cW9*B;Gia&O+u%%R(x;~O;tKH!j zB_X51^lQy%#%HmsbVo@l=5 z0Mn{))7*85J2n-23%b6()pq}FcjJd64QrBr{GB&TbvgUeRhQ!arI#nonS5hY4lg+O zb*~lsuaCdd)=Djyh^%by|Gd^4F)L)nUWAD88&5VV~*Cv;aLE3+Y|S-I?a8h?aldr`*os_K^)~#sE76a8 zQC?jCiIuJMDo^joh&|5EylA8CX@m7WpR(pY-7S-DV?RG|cJC*N(^tQo2|E0*K4kV* zNa1&mZOK%wNvc6pH^znDUR?B|zMF}AMVF52EzV;5T z87LU9I=Q-U-{r?WpQ|j7i%!4a`@1&$E#K)&`LR!{OSb&nV83Qz4kYPtO{!k9N+Lw_ z?yG-Q`li358?U?Fikp94Z$m@Y^ra0lvcZ1xtKK#*-5At*#YsvhcinlpiAIKBewHW* z87NHsZ{%0HJR)*m^Rnh(lG z42$Bm%&zOattG?E-sC3(>jHCpIn#;_U>n_#4a6Hq-&I!)0 z48ohrPw{w6mMO}5mUqyv@?w>rLe?xs!PCzz?YH~wWIXxjd^=+R7sNVRYE-@kMp{HNyKJD|T`NAXAg2J}cE!;8tnhEow zM?aS>;J9+^t)|JO<17=Q&b@T^!IV`yrfM$8*lm&ep4*4lh1Xc&zUKOEj)E=Q@BE*% zXk(4?=`2}r#!=YwJ+bq+>)lCAMOiDJ&+|X|>YQTZibS@Q%!=7H7k89hxwlB9=V|`V z{Jn=j6$OJ@ihKWdU0of66ay*W9;jpQHfu=Z($+%nvW_nJV|pCVb;s2@w{sa|{$` z?-XS}&$TDgQLyE`;GTCge_Gf*%D81BJt6W`X77yW&v)f*J-B#IeV9*j(;}E9Te_y{ z+iHFKXK-TWLav?OwkJ}TB}LjB95817)b;7r{0o0%*8Q{ls_=ZdsQ2^(Ea0e0aEe;_ zVdtI6x{>>(o^9QD>-S2RN}E;xc1w#bGyjpmH}$e!(A$>h>7OqIqRJzhCnkpIh15wQIAGP2@}AuRFsMyiVrV{&)NPUe{Fj;~$yz5piA`&wF+R z)|T-mv4f*rV&Y4!lz09wR3BJgvVB!ty)v@LvNWWyeABOA%FAr#h0DM8+?w3Azx2@d zef2Bfzm72%Ut%@y?D_v%``VMD1ZOVaqaPyww@GNhK7B(2h2N~8#;&HR(%Yr6ho!GP zmk_Pk@7=#!ddbyqA}jL_SzetU7W_Y4voF8fQZJ&)FIQIMtCz+%uA{a4e%1Q^a-9{} z@^8Yv33ij_72Izxner)ZZYUNdj1+~xG^-s(G&)0c7v{bi_;I$m|DBD31u@6y-2J4>GbGnv-! z`Th0g?zYcXC>$LZ3FYWgK)sswuR{gLqdkN0`3@83?6_k<*AbxBj z@x4q#%FCSwbN+9J4IXUUc>mQW5U=p<-rfH#L-SYdTDB~`sw^$LVE*z~SI(9AslR-4 zw9?wr^Y4XAmyB}X-`hLgJX!}daqrK>z@TPR_U`g>|LHf~7Yc#Gh2hKV>-l!vCjBpN zZ-4JAmhsIjd)xW&S-JVwmve|R2!N_O28RO6?#>=DZoT8PN|)ZKPdi>-TKZSNr~5;C zO7ZW%_1WJdz$R%ZZ-}|kbV^>usBPBWjBRscJb*rbv{7RtKGXsOy zvxn{S^UkmwU7i-JW^~VVw(XJxyVov}^-}%ortpSagGcYJ9b4*B8v1|Jsv}S_f=l4&) z|IG1VU}yk&y@9iXS=AwqTQ%Wd^~|qkWgM&-+1ay?|5>-W%r3a-x5H-hGk$tomgfKe z_jmfX>b$RIO%ETP*e9QT|Gu$w!uQ6Wn7k>_UR=@40`>Xf!)AWB>Ox=CQ=dt1JtL0N~hOhc>zWI1f_hYBz7s-il-HZr*bg7eQtbWvuJYfW zH4FC5nd*MVZ|(1MoKBX`{xknBynlT4v+e%VczLeeGkf;G<(>R0d-rf{|CQh&7zWmk z^enZ-sv#2M>V}E2W_NO29{mn~w%Os--sqFdr$1jhWAD26bJLQAN_nzZ@S*FSZV60&{vy?BrN!JjLRe4ie>V2YvK>>U+eSIiCUy6f2Ap11%1ho$me zwC1+;s>R=rRZsdmd2Z|yes1;ofnvW6F8$iD`li{hI&XnR4=feT_HADErafWD3D4Kd zw-&n3;s~@B{#o(lj=e?Q_2*xmYr&CScVGe2uG!i;cGtF9xoh9pb1z-N=D`<+TRFD% zzt@%7f1ESPgmKaK`+v{e`(`zJ)-1K_JO`eYy`3(>Q+?O&a-!LVQ{PNxdpLgV`u3Cg z>*LckjQjpPGn>Ev%Co=Eb|)B!e8``h@%mt1-|>=6TA|Rn z;Qz7-?7FVM{2QOVV@-2t`%$#|_xt_zvuqgO7lqk{y_H#abE592E2iEx)$_KcoH;cw zv@%}YxU%JzQs>P%y-r~&Mm5{qzsF57ijzKeQ?_${4bu~Q&NW+|`GgYApIWc`RMJ1_ z=YF$)#ceV%H+CMF?{5)z(bj82u)F-_l~Cjs7Q=mrIm`LfxT3 zLtw7HUbEJgl#{nZZtJdOTJmG|r{hV{`+Qb6+}B;TTGKx|yJBY3Z%OVeg**TJnqqP6 zx7xHhz9K;$EdRxqatLfc&E4~S+DFSG*C{Ng%C+n@mt44Y%c}WE)OXg7X_H$;grwzr zax*h$nr)wd>T^M3QHICCmXnKCC2#p|*|Qi_SSUD%$V7eku|>aA>(aM_TqgIm6de9} zbKiPezUcSKZ(0|wy~}Lee8lr&YR0}f-gWg;Eu_E9nfG~zLf4m%S49{vJ@h`x)zLol z>GRyPQ-hCBGJLT;X8O#oFORf(6r& z=D5v2Kh12q`EJ|ZR;CmBTpSb5J2S4iU#)U)mwwO#NwW#}FWBVPu31ofdqUT=pp|Ra zoPTSn-Z}a4be&H+-bWu;yEgn0=UPxRwXf#+<{cK7zxF!|PFWr}jiK_xLH6Z3myY@W zoOa}=U;L`a6M5?EW<9OW0{OP#n4p58rS;J$XY-FPpJvF!wK3d`s8hCSS6s3{cHN^l z2Yy(dH}_bS)EUt7uo@w)kot$tl? zVlbRv{z;~8<{goTt9Z^=E&lf>2DJ2&VL>5F$F$(Rlau$SiYn;w*zCA&w#C|QvzfkL zc!SC`SKd=1cV?@emk)eYx_sUKN9UtX2zkEuP8Ct$KEBjn@>QMY#p9m4l^tvn}L2FJO2~w@hGLMp{u4UIEZQQ{dbCc!jWsc%&)Ct2)tcB-7by;)JANm5>g01 zeqhTarX$<^w{DVuVjR(VkA2DchLHG%2!_48Zq`KlbbegQF+p&b`Q*w)-*)IY?BS0* ze#*a$ALN1nehqVn+n2+<8h#vXD*GEeb^qJOOs|4{m8Gm5Lfa=>yN6DDQnpdqsWT*| z;YG|etC@_J;AtEOXRZm#q91I7IT;rz6fM`_vf;Guh!Rn#n)a~n?op=|3S6h22kf3} zcRNUz@lofkU3KMaxddYO_Z=w$O?zRB0Q z_2RX?vO*T0!<`#e^aY0;f4o)4;mz-tClAYk^4x-hAJ!&LUA%C?Rwbq-@f$x&KG|N~ z%Q3<1>*GfOiC=Wyulo0Qm4<^^xNN;g#oZ)WMt2}N9& zrX`q)-ky7+If2{2euW_8rp2e~s((CeSLYUW`8r?h`1Q%BS1US1MMW*^O`j1lVSk>- z!TSGY@6)deDadrN%;`MLmS0vFprR0W_>bGk{|{^qKK-cmTkrnE z>bU*-=Qn-2`04k?SxhdD-=`OTUpk?woBi|76Ti%oH5l(N)y#9v`7Rfj5TkB1fA!z= zrK}yNZe4A^Uc0zqirt*2c2|WIw5&tVf2hsQe$AuE8gG~J{k`xjaI{^xH2oo$!u;^lH}O+N4XH?;3Ayy8cl$Zr=B8Z$4i%+^}vLL!hnpaY?4ludh7! zu<`u6@!h)%OCqQFJ#C)zCjVD)%h_3J`Pv%y*Q&F0Y;%)aXD0VmH>cR;Qs}G4;i19` zLM?ielB~nt7g^TM@KZ|N(H;KRa;-Kf?Kn7A@Fb-EuTaSN)+Mynx}>(}W@hU&Vb?;% z*CxL$6=T?TJm_5BvRm`P`aT9htCh7I{Wcq<{0FL?8dlWIc9FL_TW9z?aQ@$0mRHX(c4nNsv3jFj=OXblcAjVE{7wD7UiOtZ z$o>yc?Zq189yONn97~lw#k=Fyy(RinHm;LBbI+G$d;RRYIgPLG9K2Ae=s)xP<&##W z?^o5`J@uZ8^~3Kc-xDV8JM*G$lczIRR9{&$(`UV#0rLFS|6)~l?dr|{x>{ytz0gE{r&*vB3G_lz*z^%4?g|neq zrvJCyD_3R~sqPK$1yyKL{9lTX9DK|5Z9Ru+lm6yU_U*je?tliX85nHrU6`IcxeyHU zIs?NGpXt+1mCno+se;Hd2+Qt1vS-SsY3-nF!oYCj)2gRu!+bTP)e1Qtur8E==t^qZ z+1cB__4f6XY3Z}R`sd{TZab$5(V*eo@J5P)h%UVzrF&)^VdXqdZjV+&{R-@hT{ zXB*x;O3@7{yv=|sz#XVgdLn>~)y=utIz`$|9 zz~mu|?2rA9tn8lsQa3iAc*WR|@5I8u!vjUk%nV?3-~a<085l4?5QZuSW@bF9cz7UY zVO3>d0JRaDssjh0HlnB!W}>cnP_JTj9^9+goCgUF2nkmR4mM=7aCm}o)DzIi#Rxj& y(1V07a{Q0fm}tS56R902w8|4MgUb_nx{t1yyWSArQ_8@=z~JfX=d#Wzp$P!AH}yjR literal 0 HcmV?d00001 diff --git a/platform/android/java/app/res/drawable/splash_drawable.xml b/platform/android/java/app/res/drawable/splash_drawable.xml new file mode 100644 index 0000000000..2794a40817 --- /dev/null +++ b/platform/android/java/app/res/drawable/splash_drawable.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/platform/android/java/app/res/values/themes.xml b/platform/android/java/app/res/values/themes.xml new file mode 100644 index 0000000000..26912538d3 --- /dev/null +++ b/platform/android/java/app/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/platform/android/java/app/src/com/godot/game/GodotApp.java b/platform/android/java/app/src/com/godot/game/GodotApp.java index 1af5950cbe..51df70969e 100644 --- a/platform/android/java/app/src/com/godot/game/GodotApp.java +++ b/platform/android/java/app/src/com/godot/game/GodotApp.java @@ -32,9 +32,16 @@ package com.godot.game; import org.godotengine.godot.FullScreenGodotApp; +import android.os.Bundle; + /** * Template activity for Godot Android custom builds. * Feel free to extend and modify this class for your custom logic. */ public class GodotApp extends FullScreenGodotApp { + @Override + public void onCreate(Bundle savedInstanceState) { + setTheme(R.style.GodotAppMainTheme); + super.onCreate(savedInstanceState); + } }