Add support for adding plugin views behind the main view on Android

Doesn't change the default behavior, but allows plugins to add their
view behind the main view, which gives more control over what happens
with inputs and can be useful along with transparent rendering.
This commit is contained in:
PouleyKetchoupp 2021-09-01 09:41:27 -07:00
parent 036b7a0985
commit 0b681d5834
2 changed files with 19 additions and 1 deletions

View file

@ -295,7 +295,11 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
View pluginView = plugin.onMainCreate(activity);
if (pluginView != null) {
containerLayout.addView(pluginView);
if (plugin.shouldBeOnTop()) {
containerLayout.addView(pluginView);
} else {
containerLayout.addView(pluginView, 0);
}
}
}
}

View file

@ -191,6 +191,9 @@ public abstract class GodotPlugin {
* The plugin can return a non-null {@link View} layout in order to add it to the Godot view
* hierarchy.
*
* Use shouldBeOnTop() to set whether the plugin's {@link View} should be added on top or behind
* the main Godot view.
*
* @see Activity#onCreate(Bundle)
* @return the plugin's view to be included; null if no views should be included.
*/
@ -310,6 +313,17 @@ public abstract class GodotPlugin {
return Collections.emptySet();
}
/**
* Returns whether the plugin's {@link View} returned in onMainCreate() should be placed on
* top of the main Godot view.
*
* Returning false causes the plugin's {@link View} to be placed behind, which can be useful
* when used with transparency in order to let the Godot view handle inputs.
*/
public boolean shouldBeOnTop() {
return true;
}
/**
* Runs the specified action on the UI thread. If the current thread is the UI
* thread, then the action is executed immediately. If the current thread is