From a54a6621d68b5c56e32bfc3138336853420662f6 Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Sat, 2 Aug 2025 17:03:19 +0530 Subject: [PATCH] CI: Use patch file to patch GodotApp.java --- .github/file_format.sh | 2 + .github/workflows/build.yml | 4 +- godot_only/GodotApp.java | 92 ------------------------------------- godot_only/GodotApp.patch | 40 ++++++++++++++++ 4 files changed, 44 insertions(+), 94 deletions(-) delete mode 100644 godot_only/GodotApp.java create mode 100644 godot_only/GodotApp.patch diff --git a/.github/file_format.sh b/.github/file_format.sh index a3a0b6f..b595d0c 100644 --- a/.github/file_format.sh +++ b/.github/file_format.sh @@ -13,6 +13,8 @@ while IFS= read -rd '' f; do continue elif [[ "$f" == *"build" ]]; then continue + elif [[ "$f" == *".patch" ]]; then + continue fi # Ensure that files are UTF-8 formatted. recode UTF-8 "$f" 2> /dev/null diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5eb6cac..4235ef4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,12 +123,12 @@ jobs: touch android/build/.gdignore echo "${GODOT_VERSION}.${GODOT_RELEASE}" > android/.build_version - - name: Add splash_anim.xml and modified GodotApp.java file + - name: Add splash_anim.xml and patch GodotApp.java file run: | cd vectortouch mkdir -p android/build/res/drawable cp godot_only/splash_anim.xml android/build/res/drawable/splash_anim.xml - cp godot_only/GodotApp.java android/build/src/com/godot/game/GodotApp.java + patch "android/build/src/com/godot/game/GodotApp.java" "godot_only/GodotApp.patch" - name: Export debug project env: diff --git a/godot_only/GodotApp.java b/godot_only/GodotApp.java deleted file mode 100644 index 5899eeb..0000000 --- a/godot_only/GodotApp.java +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************/ -/* GodotApp.java */ -/**************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/**************************************************************************/ -/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ -/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/**************************************************************************/ - -package com.godot.game; - -import org.godotengine.godot.Godot; -import org.godotengine.godot.GodotActivity; - -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.util.Log; - -import androidx.activity.EdgeToEdge; -import androidx.core.splashscreen.SplashScreen; - -/** - * Template activity for Godot Android builds. - * Feel free to extend and modify this class for your custom logic. - */ -public class GodotApp extends GodotActivity { - private boolean isAppReady = false; - static { - // .NET libraries. - if (BuildConfig.FLAVOR.equals("mono")) { - try { - Log.v("GODOT", "Loading System.Security.Cryptography.Native.Android library"); - System.loadLibrary("System.Security.Cryptography.Native.Android"); - } catch (UnsatisfiedLinkError e) { - Log.e("GODOT", "Unable to load System.Security.Cryptography.Native.Android library"); - } - } - } - - private final Runnable updateImmersiveAndEdgeToEdgeModes = () -> { - Godot godot = getGodot(); - if (godot != null) { - godot.enableImmersiveMode(godot.isInImmersiveMode(), true); - godot.enableEdgeToEdge(godot.isInEdgeToEdgeMode(), true); - } - }; - - @Override - public void onCreate(Bundle savedInstanceState) { - SplashScreen splashScreen = SplashScreen.installSplashScreen(this); - EdgeToEdge.enable(this); - super.onCreate(savedInstanceState); - splashScreen.setKeepOnScreenCondition(() -> !isAppReady); - } - - @Override - public void onResume() { - super.onResume(); - updateImmersiveAndEdgeToEdgeModes.run(); - } - - @Override - public void onGodotMainLoopStarted() { - super.onGodotMainLoopStarted(); - runOnUiThread(updateImmersiveAndEdgeToEdgeModes); - new Handler(Looper.getMainLooper()).postDelayed(() -> { - isAppReady = true; - }, 300); - } -} diff --git a/godot_only/GodotApp.patch b/godot_only/GodotApp.patch new file mode 100644 index 0000000..a82cd82 --- /dev/null +++ b/godot_only/GodotApp.patch @@ -0,0 +1,40 @@ +--- GodotAppOriginal.java 2025-08-02 16:51:43.415399621 +0530 ++++ GodotApp.java 2025-08-02 12:41:12.176163024 +0530 +@@ -34,6 +34,8 @@ + import org.godotengine.godot.GodotActivity; + + import android.os.Bundle; ++import android.os.Handler; ++import android.os.Looper; + import android.util.Log; + + import androidx.activity.EdgeToEdge; +@@ -44,6 +46,7 @@ + * Feel free to extend and modify this class for your custom logic. + */ + public class GodotApp extends GodotActivity { ++ private boolean isAppReady = false; + static { + // .NET libraries. + if (BuildConfig.FLAVOR.equals("mono")) { +@@ -66,9 +69,10 @@ + + @Override + public void onCreate(Bundle savedInstanceState) { +- SplashScreen.installSplashScreen(this); ++ SplashScreen splashScreen = SplashScreen.installSplashScreen(this); + EdgeToEdge.enable(this); + super.onCreate(savedInstanceState); ++ splashScreen.setKeepOnScreenCondition(() -> !isAppReady); + } + + @Override +@@ -81,5 +85,8 @@ + public void onGodotMainLoopStarted() { + super.onGodotMainLoopStarted(); + runOnUiThread(updateImmersiveAndEdgeToEdgeModes); ++ new Handler(Looper.getMainLooper()).postDelayed(() -> { ++ isAppReady = true; ++ }, 300); + } + }