From 659b3e989cd5b8ebec6063e67289cd44a00499b7 Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Sun, 17 Aug 2025 21:27:03 +0530 Subject: [PATCH] Add VTAndroidCore Plugin --- .../bin/debug/VTAndroidCore-debug.aar | Bin 0 -> 3885 bytes .../bin/release/VTAndroidCore-release.aar | Bin 0 -> 3716 bytes addons/VTAndroidCore/export_plugin.gd | 40 +++++++++++++++ addons/VTAndroidCore/export_plugin.gd.uid | 1 + addons/VTAndroidCore/plugin.cfg | 7 +++ project.godot | 1 + src/autoload/HandlerGUI.gd | 46 ++++-------------- 7 files changed, 59 insertions(+), 36 deletions(-) create mode 100644 addons/VTAndroidCore/bin/debug/VTAndroidCore-debug.aar create mode 100644 addons/VTAndroidCore/bin/release/VTAndroidCore-release.aar create mode 100644 addons/VTAndroidCore/export_plugin.gd create mode 100644 addons/VTAndroidCore/export_plugin.gd.uid create mode 100644 addons/VTAndroidCore/plugin.cfg diff --git a/addons/VTAndroidCore/bin/debug/VTAndroidCore-debug.aar b/addons/VTAndroidCore/bin/debug/VTAndroidCore-debug.aar new file mode 100644 index 0000000000000000000000000000000000000000..2e9d4ca4a91a1c7b4c28cf7ef808675ad9e4975b GIT binary patch literal 3885 zcmbuCWmFWF#uB1c?Czi9uAlrOT02I)?6UkZy+%32BfT z>T>V>aNl*k_vxLp_W7T+&i?Op&OV=hnkqmX3IG5E0ssKgcL4xk|7!&RaPL%`)5F^X z2+;hmr0dO8{vUUTkyro#`JGBTTfgv0}OVX#{g7`4cUE*B-6B*Mct2Ulcg z$3CSH2&<#8lCZNvx%u~}EEL<-SnOw1O}p!|U9iB>Ko+fYk5B zcM*(uT_M>gGS*G0&F$kl$Iz2!rAQZxHDATP+hRi)+imGl(K1`3Q9nba8dppi9m9Wj z1AmP;c7+fC022cMcLK0-g1NifxO2XO!4s3;@=y9Q^!9R}a>V&BDarE6{Z=qSxy)4( z@eo->atu-^7**~&l7(@f3Un~4L^3fE^=nTDgTlV<`R_GroGtFX-MjQ^3AjRRTw^l! zMOydIGR_t>lQXanif{^W1K-_}4cF#*P5r5itZBiUJ@{I)kIVwa1h{hF&a7+@ok)9M zGWune-Y(nTLTVo@&fuBZan%Niy_^-4|DU zidTo2mfL=}nw+MIJu~e1DL4KwTpGm9mtL!Cz<1 zEaeQe8Q95b}9^|j=nEK-p#_RbL!M&&0 z{LRI<_qQ#Tm5=>qihghuvZ!7TP*LY@`(0r!btFDgW^J`F3S6G@4YJnini{8-jgQPm z1%xt$KK#`gEG-j4=W6%0n{B5A?#8i}V=F^zR=z);E7 zOYdqv2L=#_jFN8ooW-F7d3tY@)AfaS@)KUfql9YnY`^K|6`r_8RdwurOU(Nd4sv`~ z1Q<9fNY7Oo)(`8K!h`_7j9>u&U$N15RX|z zy&;O;Z&=pv#Ri^8Jn2QTMdvoitX$Shq3fc=FDf(iZR`aWwN<1w2W`ow^TamrUM==fD3E@$Lw0 z;%a64M%JuIsUx3HS0pn0UFH*Vvb4~jiP-E8sYj9H>C26;^#rq-+xOxN+T$r_(rF@O zKaP07K`-l=7T2wWK&-EkzqWOH^RtZ18jWBzk)yl9(uZvU&na~hfppv2BCUEdSR_);m9@a zGu_E*^+lSd%LZHH+<6Ua?VN5n7D2`;b7pN)iVr5gfh#RW0`4?P+s}wJu2viD?YW}x z)`(mF5&K6tHH$^$YMz(BEx%D-y`0yRtE|DwU9&Y?9@I~!s7q2fHcTTV^NN!K_}*L-RDnrZU3wPob9UCrOGSQ} zC2I6r|3@FKt${Ofy1n#C103Zs*YMWG-;ACr50&UrGATeDP0Z~`D*9LpUiOT-p(=Dt zqEd(vs_pwDC7INnVbSvBB)NW0Iz?=*(F)`I@TZz;n-p111K3_KOPT1tWN;>@R=D)o zS$}KO;+kUo2P&@voKhPFv9p3XyTA=vO19AP&UvS9n~krrTAVe&`G@op9SdTcgyRch z*68fB#&GUE=|VR{TQhKTOg14a4w80GdpQ!_WD*xGw6-~5Ut7H&<^Q{F@jM&n?9DA( z#ha(v6$$oQ_7+v=1a5JHH1<$(Cb_nn=fV1Gt0wi`LW29+xKBL%^#q+$j*xjg-G zD<2+BuwoqJh6)r-zbmJ`fZQ_M4W5ueNSl;@EERM#@umYK)59b3ZNAnn9w|=Q=7inH zH`*E2qY9W4NXk{Y#Yp;bF&Q%nf6xLa4EKD`$%76oU1xJ|Iox+5t!GKtW~mC{5gw<9 zH6lA_v}ng8%lIMAySCJU)sp;H_A6V4#L+!DlE!-nB2T99({jdDit52ngae?mt)8~C_D zLTD5_vC++lYm>euQ>{5WxkM7=018uD+ROPDA3BLR( z6{*D#EJ&nbQ0OgTw4`LPeelUYifT1W*3zOBni(2q@8f=|>jCB|C)qVYkgi1P08@3B6n62!#?2> zv$_h0_pEyAIzCG%XBW{a6_vI<8fRNjISwg%DTX12&WCCruThV;D+lvJ19o<%-l+&5 zTs%1T6E9yCf;tyH#A31S&uFQx^~Zj{5}n_aJVM4Ly%t^N8tKg%vfgT?t>fdRQ)!-aB$M=UBpY5KUWa zQOPt3A{mbhGTs*Pen;dh&_}qeahxxustqm0YCW<(;t$a;R@c!ZUP*=h4%z;8poflV z8rG{|M`NE|grW%biCbQ|bizYE>Jaclf;PZqCI)k(1k6$_z~0gg%K4C^@{Wj4F zLn~W$Q11)&6B(b5qugg!(w7u3TcxIpgokrd1zU%KEzBaO$YtJo z1-(P1enU+rz{vgTu-x%k7^D;u+&O1vy0HJVi&U zs2E2j}-Bkm-i%U2ES2v`bVS;Foo}KQ-7k8pA=!y@*a+gEi(MW zq84Urx+qK%fAb(U9xv%Bn;Xs9pMvRh&|DN_hJ_m;%8znyDrYnv)A7qUEKL2-H1L`` zL+K{X5Tm3X%o!(=xi=>G>K>C-zhG+mz9zw{qjWFo1^CqOl5U&C@SdOHX)XO$!lrUW zRI2#n?t8?DNe`ZJ6AOMA>hl*r=(&{S7snX6h`q)1TzQfLNgecR#bxNjAzfqE>;f65 zdoxXCuon;u(lpp^gX58%67)0HjUrsXfSz?)5Fe%$IKlsiW;VYndZ#tx-7Fo^jj!A~ z;3~=IR&n$BnyJ_myB8M8e0v}U;h~8U;K~}ISMdD8!qQdEQ`!?YHvci~4`jZzRcXg) zWq{t(8_~0}nLpp_NgQr&RWAM6@s~GRZ!{=JuhT!g{6?64rLN`gThp@pDe~rWA>c1A zs>Gl8;BrR*8FwLa7i#jl(i}?a3S3q$ueo6Vh9oXaPX{M!E;~5P+R26s27`0Fw()>j z!#rS|u5cGu8@Pvqjk{iCJ3)sO5$^sqbp=B?{@8DMX;Pm60XMKMdB3ytt@%~~y&W}P zXwD01h)7{w9s;%duFe&h1uKb|MGvYZxcpJQeonIAQcAl0LTq| ze7F5y0P*hve^b=g=Ko--zm0!4{Xa&Dd;gCw&{V<2`)4VfyGe0(1K=Iq0RaC1 D;Uo|& literal 0 HcmV?d00001 diff --git a/addons/VTAndroidCore/bin/release/VTAndroidCore-release.aar b/addons/VTAndroidCore/bin/release/VTAndroidCore-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..2ca4879d7cd81bf4d1e9b3906d1380cef039bdb4 GIT binary patch literal 3716 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 void: - if not android_runtime: +func set_system_bar_color(color: Color, override := false) -> void: + if (system_bar_color == color and not override) or not VTAndroidCore: return - - var activity = android_runtime.getActivity() - var callable = func (): - var window = activity.getWindow() - var decorView: JavaObject = window.getDecorView() - decorView.setBackgroundColor(color.to_argb32()) - - if (is_light_system_bars != (color.get_luminance() > 0.45)) or override_appearance: - is_light_system_bars = color.get_luminance() > 0.45 - var WindowInsetsControllerCompat = JavaClassWrapper.wrap("androidx.core.view.WindowInsetsControllerCompat") - var controller = WindowInsetsControllerCompat.call("", window, window.getDecorView()) - controller.setAppearanceLightNavigationBars(is_light_system_bars) - controller.setAppearanceLightStatusBars(is_light_system_bars) - - activity.runOnUiThread(android_runtime.createRunnableFromGodotCallable(callable)) + VTAndroidCore.setWindowColor(color) + system_bar_color = color func toogle_status_bar(visible: bool, override := false) -> void: - if (status_bar_visible == visible and not override) or not android_runtime: + if (status_bar_visible == visible and not override) or not VTAndroidCore: return - - var activity = android_runtime.getActivity() - var callable = func (): - var window = activity.getWindow() - var WindowInsetsControllerCompat = JavaClassWrapper.wrap("androidx.core.view.WindowInsetsControllerCompat") - var controller = WindowInsetsControllerCompat.call("", window, window.getDecorView()) - var type = JavaClassWrapper.wrap("androidx.core.view.WindowInsetsCompat$Type") - if visible: - controller.show(type.statusBars()) - else: - controller.hide(type.statusBars()) - controller.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE) - status_bar_visible = visible - - activity.runOnUiThread(android_runtime.createRunnableFromGodotCallable(callable)) + VTAndroidCore.toogleStatusBar(visible) + status_bar_visible = visible var shortcut_registrations: Dictionary[Node, ShortcutsRegistration] = {} @@ -94,7 +68,7 @@ func _ready() -> void: await get_tree().process_frame # Helps make things more consistent. update_ui_scale() - android_runtime = Engine.get_singleton("AndroidRuntime") + VTAndroidCore = Engine.get_singleton("VTAndroidCore") set_system_bar_color(ThemeUtils.base_color, true) toogle_status_bar(Configs.current_orientation == Configs.orientation.PORTRAIT) var version = JavaClassWrapper.wrap("android.os.Build$VERSION")