From 91a1e4c9ee4a49dc3c8e63d313e1fd8394558a41 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 | 8 ++ 7 files changed, 116 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 7d36e24e871..fe61a5d2aab 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -43,6 +43,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" @@ -199,6 +200,9 @@ static const char *android_perms[] = { NULL }; +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; @@ -1467,6 +1471,18 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { //printf("end\n"); } + void _load_image_data(const Ref &p_splash_image, Vector &p_data) { + PoolVector 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.read().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; @@ -1486,6 +1502,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"); @@ -1513,13 +1558,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. @@ -2556,6 +2622,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; @@ -2608,7 +2678,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); _update_custom_build_project(); @@ -2812,6 +2882,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 229f858890e..3e5444a886a 100644 --- a/platform/android/java/app/AndroidManifest.xml +++ b/platform/android/java/app/AndroidManifest.xml @@ -45,7 +45,7 @@ #n=r4|m;<@4B;C^DyVxb@th3@88+a6RM;jO@K>@3jhEJWM$r{004J@005@e zJ#5rSvaA0`06@S+_RVWG_qm<+&!{ngU*=U2SrI1s-~a#lAMXJp|d=pLAAk_JIc~77XdhHyWoB$*u+jdWeN$HNi?4)zw$wABYzgty6^NwKK(qaJWmp~ z!!aJmLAaGKpnFuI%Gc`zi`fm6Z7q4e0prE3;wvp%axEjA0y~_5OO}qyGF+kWKAst) z)dJ7xu70e&21}&9w$lHqVaGAH`T@#gt`o#|xkA7F@ry76c118{e=FQy5IQ~LfT+sS2GPF5~9xOJxr?Bl^#5+1WO^i;m4c~d~ zzf*&|xf8jW;306eH++iap_8neNy(qUU05Y>A8p7R`7v7PC&tJcv5m^Yp~}H^Vs13=)z}@h+R<;dicbd+xL04U zGPyan8-(lb%vwC%1Xm9S&hX~!gi|uO{n7TJ$@YVci5MizMms`$ECtuYV)0up+aII8N1UhwD!|=`*sOwBrnZ%-tOy|c4uw#pZe*+4l<rZH6nR9|K#M8CmGnl!#^-}4ud;f?lh)pW`Xo|38 zN~oZ4&2|~ATiVD0j_0lGFlZ;SNkKwX?Q(~L=1HgCHT!bob>4s*x^4jDWzWA1%(D}) z)5B03ftCP~e0aIs5pEdGzl{5k%9)xA+{i9Q+bMk0yOxy>GN<(1TjTIoLpx38JV`!% zndK7&9Fc}$aOj|?z#Q3>@L=&Jhg&WQ(0)*W&-M6s;E*;ZOe4aXNzKc{)geF)9Y`|g ztpi}e8WDEWbH^6ihUVX6Y>Iy)*;?-L7JX?AQQ;n#p10xQ5Th%Kr155OfmfqJ94N&{oX#WS&ZT;@7LM zH)rGAOv24GsWZYS2X-MtYi)t+Cz|a0GYc${Kg;dCtDtZA2bZz~@{Yq+zMw1ukh90w zClu7yOKG;$6uEu2{i+Qz+xi3xiEGl^L>M)HarE#mc_Igst#Uk{p`O({R^M3McZwf! zF@(8$wNwo5sqY`}Jeg}zqvpqwBtXfFK7zB`;TE0n2Z0lU=rjA3CIJ?pkUQ;sQ;X_1Qo(qc<4-P?;-?R-K<%IQSl8zMR?loa4* z54*?plL)ZrJZxVIfyMo@&izo<<&(?6^u&~v6mC~1(A0TmV|~oR+1^L8#PSd%nIo$%DAZViGq}3S zc`AHfcIS{GMKg|(AZ!IR@|0C^PI^bEY#vx!ypAaMcHsUZ*;yq}*O-P_Ykw^=W`6Pt z?jFC~z=~o4WYcf@Hcl|-7BFj;5iT}q)Jy=>tCC4K17ZC?odrtISnR1J(-h*3`hJK`IeL{tiI!|q1%~#b?47$6h8ToFE z6-9Hnf-6tyNiT-|h11x5$?4E&^bahE#5t+imJILDqx4|#p4vOn7GiufDg|x^vtN*? z=*(y1jaO@hM2*a}KyL8eA2ePvlB3r}d@Q5!(*YxCRq3ogvm#``5S^FA)#&p24!6i~ zw4$Rbn@=}IySSdCh5^}hn+5E_#A9PidAjRs)tt0XDfk%}mWtpw`aYCs0_E5v5PKP} zfZkGO)j0R?K^H%T5St{9+}4_v%UK#w8%-nY)?Z_5^IM=5z~CCS((qh{4>c%0CU-O0 z9K`|ij%05QU7Sz!(s_g?mV7-{fl6CuqxrG$4b0S;mSf_k%M|n-a^{$H+G0$zqX~SG zxK`Bx2Y-Lzr{b!knAU5LhO^;lG3Z0@>9f9lv_gD)(@y3I^$xaPE|788XQXY3x> zvfC;=c?UCg=841VJw&fOXB?dfcn8x=ZP><8ep_e4PzYhe<7m93ZRoxrD5j|$%tEYs zqsCLqw7cD*5rQv;fzbQNj%LIPxf;0nU5))ByF@6TkS}ARu%_})rKoSi3s`sN8*1i~ zX;dmx^+Qo+wlRwD=~nCW4((EwzL#cpQP!E#R`t>{EE^6`AD^&yP8`Hso&BYUA_d?^ z&#$9U9FEk7!%?}2WKUPGL*pntsjdg1sg=Me%v=t%JV4`4nQi<;{l=%{l$1LAMbGz1 zFV&;o`{+f93TjuhAe*L2wR4)91iNa?+84$1IX z9_>7)P}X4TS^kf8vnTQmzO-|&F>E4rXebRC{{mA zx@Meb4=(t=BL(Q1fj4m9bFz3axMX_o$6VmK+uA&pB8XkO;9{0!&yA?D{5DQUqD6$wiU@(wso5hxNg3C zV%RE_<^5u+z#x{^+jeB-y?hFVFMFHl8w_;rlEgqP1?7anLwho)kNg+-a)M`4N>uUz z0=}O463s*K(6u6l3>9j=zlu;ca`?6y9tdBbJ`OO5hItN@ZB35M8Sm!FVVG2@!k)8< zms);>uMHz_TcCnf#{5_mqKzjI1QM#g1hSH`+pDSG^)T+hp50d!?>1%(bEBAZAkM7XHOe=Wr~GD+_&;s;+K{(0)S+?CSxQLxb##7caKd)fP)p8C10% zP}NE@%~KLA!e@@9*46`pr@75i_mLf*|C{k8p>voqU;a_lm|ZxZ231Xjen#na=emS<-$!RlXW4%X#cdWhusp;-qWZ(u6yk=I zT2As>$LtJ?lbLHe>DVo{x1KgCT{2iDqrDC5On|^4i}lIOH37jJR?=})Ep^!ir99v6 z+1+=TOnT?k_E;S>b>f24Z^ud*BEhez_ySpMjEk<;N`6}1?*>L{D;`*B8kaRSnHF4i zcRV3K;J4z3Pqxzu>n|#jBZME5t`?z+wde)(V9!FtR0r!EkZ(U0R68-aeB3-GHDx*+S=D+M*;B?5YT%E|JUo zC*`2d&9$VqTV2?!Op(1b8k&3&q@U22sbg+s4z zB-RECydS6J6fEe?rp_+RQqSqlrD`-Z)(J$4hy53us&2uaVRe8+PSni847HTsKP%0p zeF(bV(pEKcJaiD;L_#=l1aXw7#4ZpE#_+v|4 zwgt7aa->k?b&Q}53zKPOBLyo}%OVTZ!gYV=Nj{u-Mx+juqJxEoSB&E8A85pOpPf}h zs(F20r_*!H=S@#jSHh-?ccoAO-Z*6<-f%KE0m**c<&zNJ1tr0j?Ceg8Kx>3I~whTAwPcbWzPqFnoksU)p?sSosr=!T=y^T22XIK-#DX=^StdO%=I2~ z{H~tns}5hnx=bjUrxNNY*2qgg{*nGzSh}=6vi>rLkJKzfrtF_1>SZFFjMF?e;=DB5 zYM93O=-CIym1_8Mr~`&Vhu7Kr`IcabCjVwbY9EeD4%5Bo-NR9?gkNZ?;Vi}W_0sXr zWV4_N`ySKgai*052eTe5%Jo&24T=)zB1|Vz7TuMi__k@|ijl!kbiU%@2P))D;{KO= zcz0R&yr%x~tRFDWYgNB6OfT@yLPw*Fr_57YxD<3FE!Oc}D=M3Y)<)EU=IgU%p@Nn_q2( z6ta(T&7_{@mx&NtQ6c3FhEI(c(Wxh6B*9oPIn4Cuw@rW~1-U!dUm*8K(t^~?0TP2%`C*MMK-&*=)5*7>`LDC z^h@CJ=()9bz0VB!ziyDDmccOyg+viNb1j5HXs`^l%8^*odc63AfW zgE~gM_Dw^Y7=~NG9TbpjL0r8l^T7-crmV_em{lh!x!FeoLg`xIb+cidgnY6*nh5Vb zZ#%Qh6IMh6{_h{7k8p4|w<2es3w>krF}${IL!F>`)$G$#9(!QC{HgC;IHT9Hy3X3K zIwb@(MO+%7m;m@>vbrSIwl>DOc<%F+b{BN%`YqE2LnX5mJv-47LQMKe!3tKWLmsN> zR||Pxl$RqPTCF-Dt)23yr`&2o$+ob$7!Y-}J z-8_NKDENhGfyLIA8^6`1e{(v)5~zc!`Ra#Mo(o$)>KLsHhtroSLKM1GTMb)MUqc+C?~vQaJULMy zhDiJW9P8q*n!YDpfBku_;_3`R54 zT{X%>B!2G$C0B^J|Nk%7HDT4(gLxyIe8Std=QdcCW2v>b^WFHg`i zWn5x>I`VYV?HEd~IuN~_>&vyQC|ImQtpDi^nudbVhYL znG3B|sO#8$NmK1^N!m7@RMN}$5);-*@jGN;W;?a`Lj!{4sFp~V z-R0tWFz$UnJ^QECdMtQ%EWuPgY_pcM>5>_3_*+a_-`#520%eu??6cV(UVDWHU0oC} zQRR*1v`~fL!lH6?jRW1&GNOz5^liW=tv##Sb7=14yXm31ckQFGROSw&JK?5+dQ+J` zGjJzkv`nSI4Jf;2qpgZq+*I96-xe})DnxMR4{EVN&HV<(rO($0!io&}n)Ixkcis!3 zIb_@RUk>DHUm3x*cbJMNdpxi_f5&Us-JP;OC$HQASv&e>UYl#rDT@6t=Nr@SN%~^Waw(4Y*?ek$1L=TO6 zfJmELr%8Gs|$_2rcG<%5yniPqNBl~squlDHEXn$|+ zpdz-`X0EP`z-9nxt2IA`v;Fm0Heh5kX4ffd!1uOOi|SNY=&?I`%&%3(WTL?I}kr@c41M7K?H5Zl@6liV{E^+=tE zqRx=^1xY@AIT*z>0^sCy`1WuNX=e!`0S`me3m^v(rfUIwyPeX`gbuA9YkA z>^Il?gvOUO$1V6tqVpO3rHy9}xzh$ka$0fVv37&W7%%6K%*;0a_3WjC=<{S!;?P#8 zjb4hV{5v$<%e-qO>{&?OSP}R|DUW3-!nyeQZgKsM%quX*_#~oLZyT<4`C;EQ%sWm>w=D+0vl)@)mdMT*I^>kaVELr4AcpoWnn!gmEeu#T zZ}rNWb#U%KvKL9w{gDc14jRG@fqqfGaU33}3J64dDqQ+G3GMW`8h&UbwntfBy}4)1 zxCLnmwl!Q~7ln(UxPXgz&_z4{fc%H-~$^0Zy!pW27# zr6JArocy%NbA3l7Hz#mOmfDI(Y`dooVT^S0++}SnO(MF3Fhw&xBujd?ZX0zI<0JK1 zYP&XM0PZzW5C%#5jB%h~(vc~%6IB-B()uLrgMosgEITcF7d?Dj>SO!M0|RP~Ay79` z1Cvo_V%Fm*4#j?RF1a#V6mr%md&!mTKtZkgUbI6srbixKWI6%sIc2yJhQjRr>ts%! zGjw?!hYRE+8n36n`<)gF;iYDfgf2{*RJi3V>5dIU^XP(c?%1FW#E+amw!etSZFUT8 zIWex7Ch;vhqI!txlEn(yPaBx@gq+PPWpK#0hb`oNet~BAtq~m#XTc2c7nVhS@C1d{ zS!ZK>dotwg^FZck!wlq2<02L!3SuF_?nlE!013s3r@`GtO~0b#<@EQB1_zUVmQ z0w?##;iEH`F^jg!D|8C&51ffwOk-FqcxFRub;qiSM@mO`PSqP$INUa%;zz6OS7e=M zLDn5NP8D`xd0drO+gc00zH!-mah8bto%``iVEh<(EIcr5e&5NXN9x8LmUwQsv7Rvp z)72599)7-1tQuY-diBi7mObL9)ZR&-k%E4-sc%3B7aFW_>Rwqs9Pg88YxtpOooGtE zqDGu{aq`RnwNaumWrlYiN-EG6FNRJY&FUSbKk9(;z!=QLeJ*uHY4RrH#%1?v5;fd{ zR->m=rrwGR=x@BU<~0>yj&$Sh{Eh9)*)Ru;>_BVrBch0oH(_MmSB4JZh8L*1k1j-= z!-DUQ(zVcRKIj^M)kCdOZ{YnXfQSn?DliFl9c|M#N}X=iZXLi~Q5{Su96ENQ?m6eu z^E`dmNQEv8Mi-L;-Sc05synI{bmkYQn1=S zpxpAlx>OFI=a`2bOG|q8_`;2==4^H9vC*4IysMWXsB3apbcak6|8a!Fp1r0~mV4Nm z+jaoP{Wcf@!QuI{0XO%EEP>YC?`IQ(b^+Wxu>;^d40ObP1pOj_Kn9gSb|QT?WF01s zkY~%5)>;idTi-B>)(kZG_2Mlx-Ye`=QuftLg|E>g=YMhnQG7~1*k%G9ZR{CaqxIEa zBM|3VGrMM@%M@gMuAW*z=spE}*9zi%ac>;l!cTmLS2TcxKSbZhhXBlmH+ zy2zYNeE>$GnNmg)tO zqnoN%|BpGz^VHPI^A!AEChzsZPU z6V)hunJ<%e@E|TbV>KDt?IaA3r$0}E^;+K^I)gf3N$?1h;_rSaYH#m4f%2D=FL~UU*5-ztd3xTo;c=|Xch|*J#boEeBMn8DVrN1AG;aKwK zt%v@j(QB8thc&UkwVqfJkFQp915uLzl>g#k&evJjdPU(Xi>R25Nu*Q;D)3t0aCT(Z zMJO*pJk7=Jxn2S-q-uS0Mz!jBsRug3P0l&~%LisCAFzDJNFq`OMshQUDe|%EfGE2@ zMMz_J9=o+E8!&V={&?nj_pR0x$tt*q7pqJ`x*F-H5d35Nbu4|>7>{Cq1J1++r z^W}xPfr^w7YweE?*D!OC!IYHIco8O)%Ku!pN3LEae;>cM;gu#;E{K4jS4V@v`OH-O zU6kVzpGj+~^~AMxP#ZTPMb|{z;NLjdl<(98fA93QwC`ET~g2A`UU|IlqG z>$ZA$bm%>(p%q>!){qtcmm}-xX~SJ?Gk0F8Wm;_S1_d2*k}?R@T64TKc5cdVt;o;~ z)923vymG#Mv$cpj^cRmyyWNaRkE#QV9|`ao-+7svEO9B4Bg)5j8c9`Lrv3Jy^w&2G z?eUMSx^IrSx(cIU6B_yfRSVsW>BC$=ltYxtvCaHh-tH(`hV3|rUCnb`=kJ#~7*4|> z6l*TvcDLqoXfa_ zrW84J@1V0~rpfB#qJ9~N!pfoy3uFH3@0i7!ymsZr4b{%_kEFKef?&H}KmY0UD>Xg6 zN>6@KfRk4|W^ircW|A5^Q*BFdyZgeDz7B=0{wc>j0iO$p9aUkGDlL{+)wIm^M}EX| z!&uLei1IN#ZAsq`z;HCRIgX5o)p{=PD^31$I0{$5yPxKhn2H8@^vL@e0FOrRMH;pRuZCT*%Z_ zuX4|}=s7H$s90DNaRRxE`${5P$5+A+Jq3D5z_5r5Z_V8Y17i;QYoJfHXO&{5S+;*e z2R8IM0uoMio`fb_4RNRK83|P_o*U4?p?# zlI!T~6A+~({^q5EOYYjyEX$NfsJAm~0|#VJh-cA_Dd;%wwTg35EDsmY6T@yU-_Gt2 z4&tbF0%RL9^G&mE;#mc~#+Vcg_P?YlV%{a1r!x~zHBkBtO8%72GLn~J(m(KGinr%X zfXRz~H~HXZzU|fxei%jj$ozs*Mu%^b2B0awY?pe3rHPTa*Z3We@-gp?*MmVg_iwi= z;BmEEKfX*XwUhO_eY=9ksHXzZIvL~909-%}qR@!Zce#1Q@^}98lrj104@WtBnjgqG zjtUwcXikXVLA-5cc-;v8alF95#23SV_XcnqW{J^uDrVwaYl*6+ITx?+%|6N+o)d&n zHCti*96naD7EfSCwvwak#wi1Nw9ao?1@%^z;eiL5TJ$O!wLV!5DN{UmvX{^DGw)4w z?=tbk^xXaS&)l)aUvb3^@l2VP&{rS!@!k=anWm@4XDKMI5_+{9#8c|9Mnrn%iX zz~&R<&>pG97)&SYLU_7j-`3Bkp9_t#&8*y0yha;bCzi5_!`B=d9a?_)p?ywoCLIM~ zV`JqkaP>qw4@0)~sPDn>L)ycBCUhSn)Htjab^}4FLi=sCk!o}B6D$;!Z zQ= zMa|Kz`uzNPzHquG?Y3;4X;_=f4@j$T(f+m`KUuC|`q1zVb8E1P&ZDG)W)3ylD}SQQ zRt_#s;Kl86nThw=Zk~Pz)dZZJ#Jx>E3QCnbi6kzv|AB&W8mc#%Opy*>1=zJb73^pj zkL4JVxLw|@=icwnrIM8cucKR|MPt%G!h%1=oonfCCB~d-Ki%D22CtKGC5Q!;&}_>` z+_{4vj*uRU5r(f&d0s0O$)bZm>CT`Gja6W6JZ^4Io{gj_qW0)K<0$SZM6^w|NnB88 z*!KCA^wzSmfqouAZa_zyD2zkoy1*+v{>iw-v^+zDsYTv>l`DW3Wsm2WyA_CEVeHs` zAs2qllMp3)vR(6a(OsTOPDJ=7ZTne7LcZL9e2E-O@C_)2N2T~w%ym;7Z3Ce9rtT3X zwbK86Z^C$=+RtpWku&wC=0DAY`YPBK0{zQzw*`75pzcuIl%H?m>1uBCF{5B>;^!v? zhRvNW4mv;M0Ent4#+qXFsQKf=j*mZBbKoLAEoppOq0UT{lJBZ@(L~YDN z_TQ6QBKd6Uhc%P!9HtBIkpLb7(PoQ(6!;n%PKw9glkAc=<7?jI=Hhb25&rd$g_-lk zm9Gs_3rz)Jd|s(HuQ3QdrQRBQN2PNL=?8NN}Rx~kxXm4Nk0RYU} zu>$e#-w*Sa#I|oap1MDDLOA4Kdi#0_0Qme~^anc8pbM4K=tqb9YbR&6GALAup1R-t zkUKBL4e(wVU4xR2`CRW|S=!j7^jwzLxQePeU5MB44=S+N<~iJ4UxDjE_Q$UNzn6Pk zX>DLIZYraUHb};hMo;t8_C+_CNT|NhK>w14Zd>x=^wN^3Z?Cws^P$?hZ~d(F)_#UL z$LXth=)$`du9Qi)_*u>38~&Oeudgc-rW>ZlyR(?pz(ZtJHJS9>1U&83;GsqxZ-3S}2R?@I_sDkfcJ!Fo#8 zA&LnE_!CQf>o~zY~L(jXs*|Y_qXWw z6@cM+i7n;(Y38OxF8KA;U7vrg$gVsG(POyP(cdI{BWm(Bm`r)djIvKGX1HN$=am_W7QP*_6Vsk|*2{IijJApOt97UmC-EPLG|TOF`^cW+`v)#L!-1U?R5mtZ zWHQXqY(K!63>7v$f`WqZ^f5Obn{wtXJYMyj)5>JQ_YarPPE`-RMrE77K1k*BHNgkm z=$q2k7X6XLG^3M268to7=l2qUwua*5kiLBjvNw*%K3|UO3*}j*A-~B-=olXK)1#7- zC>Ln)S`A&9fC@=ANb?dQ5a%-<9~m*osS-6m@Ofll(6z@FpA^FVEv%bzjgYq`oIs zk-2+AmUr(VWB@N5o^T-GBo%kJ-;G&}DR*RUPB5TT=L9PxA@&O~5fyE?ot0G*A0(sy z@Z)DEOPTh-zU*St+7p5B9JG6Y;>6TCe@<&TLYc>q?YKNJW}x`BJl@=zTlPgCl6hom z&+2ncr|jql%hptRAK&;_R7a`lhYi56qk~CejIrPHUAQ5^No#Psp?KAv7_JS79ylrN zXa(tXH^jCs+P`z8*ULu-m$d6wuGINimKWr<`91OqvopY;<_wYKKf71o@&&V(1NUC^ zup~w)3`Doo#G&$wf-f32B5dbfn&~|s9hRU{R8~5?E5HyMy8>oKu*!G+5|Z+}B*V@0 zijVYy*EGBuKaP@o6jz{}0Py(Jj#I!o)~$G!(0Qg{SiJHL-`6L34P=d;tzY*eAeVqp zmyRU=!5c&(wLuVIR?FwPaPZUIOq%lLo$sdt!~8PYCZS4!r|V0Q;-S;g;nh6ri^{f|w|9HxJ%0u`mBWezTUq!F97(%&=Fo}&5zoa{_Jk@D z0S9R%Ub@;fzT*~3{plFmPrm{V^fM4xJvz@O)r;eS;-oAs*Zp|Wol{NxQ^f$~c{i}A z!96ra^z$SFYW94ujlt}MDArZeu5xRIF5%=3`>7fFX#rZAX1%oEg&ySHi+7AuXo20B;_YX)p&i%`u8vA{K!c9Uw|zIigxl8+m@n92zd;6V9K+R!QN%@6 zGUl7tCt$~uylDTgIERhB=X|D&7_dAhdnwzKC(1^83@gQvZ7{NhAY z*F;g;n1$4b|9IQjY~w%0G8DBu*?+usyKEz4;NQ5wjFVsNxZlkDiU7P}Q5Py($sOJ% zV>OH1b^g-_FAUO8>UR!Dxhl)^0m>pQJrtNV+Y@jZVcDyyy}glK?F5CjfYcp_bLYUJ zWOD}=Mpzlc-H`gXPs;h89JARvzZp~CTG3R03?vFgIq2a6Ml|UH_ zYW@K6*Y5a6A8y=%mdG%oI-yVA;j>m>5*|xAKHcWI5O}JG-S8{4AP~y*t0EHcNU+Ge z^78G>3FK%;j3IqZcG2*qAkK@(c3_PriRDdv;f(^}caVf%p;yWqTEQV7t_$Uit2u$m zL5xt#zL}CL(a>zNK~dSk)T<9C6*OC9X#IcI#7O;~EPr;z@BTp3PtY*8l*?MUQ#sIrH}MN?<1z4+Vx0`bB;++HzD__^KBHw9124Oa;ml`tPgF)I*ltoZ29;3GT!*us9dZ9rkBdDz?S zGB3y<;fHwi1%;Aad{&A`Xi<@s(~B0(2y{WCBs_BNY~RI2R@~$D=cqx51ryXSpqteI zfUwvb%+=Kq)!QF{(|6#6ewQRWV$Z*K0gq{*oy~F83BiBS-wdL7ZAjxilPa z)PK25{2N0fqUz?S`^+tpj}>hlE`okC{bgX3_uHW&q#QJ*VOL^qI=uBTz%MPUD)4^9 z)s>ptkl)UlMJDIVKR3uY8?Llsah9#uf)7{FVdQ&MBb@0JJytLjV8( 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 00000000000..2794a40817d --- /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 00000000000..26912538d3f --- /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 1af5950cbe0..8872fe6d059 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,17 @@ 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); + } }