Android 15+ : Status and Nav Bar Colours

Thank you Taifun, I got much the same from an online conversion tool.

OK, moving on to item 2. Does it work ?

I created a new extension for just this, here is the following java code after much substitution and replacement:

JAVA UiUtils
package uk.co.metricrat.uiutils;

import android.app.*;
import androidx.core.graphics.*;
import com.google.appinventor.components.annotations.DesignerComponent;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;
import com.google.appinventor.components.annotations.SimpleFunction;

import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowInsets;
import android.view.ViewGroup.MarginLayoutParams;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.updateLayoutParams; // << not available for Java - Kotlin function


@DesignerComponent(
	version = 1,
	versionName = "1.0",
	description = "Developed by TIMAI2 using Fast.",
	iconName = "icon.png"
)

    public class UiUtils  extends AndroidNonvisibleComponent{

    private ComponentContainer container;
    private Context context;
    private static Context ctx;
    private final Activity activity;
    private static AppCompatActivity act;
    private static View rootLayout;
    private static Window window;

        public UiUtils(ComponentContainer container) {

            super(container.$form());
            this.container = container;
            context = container.$context();
            this.activity = container.$context();
        }



        @SimpleFunction(description="test function")
        public static void setStatusBarColor(int statusColour, int navColour) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // Renamed from VANILLA_ICE_CREAM
                // Below code is for giving the background color to the Navigation Bar
                window.getDecorView().setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
                    @Override
                    public WindowInsets onApplyWindowInsets(View view, WindowInsets insets) {
                        view.setBackgroundColor(navColour);
                        return insets;
                    }
                });

                ViewCompat.setOnApplyWindowInsetsListener(rootLayout, (v, windowInsets) -> {
                    WindowInsetsCompat.getInsets(windowInsets, WindowInsetsCompat.Type.systemBars());
                    Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
                    int height = insets.top;

                    // Below code is for adding padding top and bottom
                    v.updateLayoutParams(params -> {
                        if (params instanceof MarginLayoutParams) {
                            MarginLayoutParams marginParams = (MarginLayoutParams) params;
                            marginParams.topMargin = insets.top;
                            marginParams.bottomMargin = insets.bottom;
                        }
                    });

                    View statusBarView = new View(ctx);
                    // Below code is for setting color and height to the notification bar
                    statusBarView.setLayoutParams(new ViewGroup.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT,
                            height
                    ));
                    statusBarView.setBackgroundColor(ContextCompat.getColor(ctx, statusColour));
                    act.addContentView(statusBarView, statusBarView.getLayoutParams());

                    return WindowInsetsCompat.CONSUMED;
                });
            } else {
                // For Android 14 and below
                window.setStatusBarColor(ContextCompat.getColor(ctx, statusColour));
            }
        }
    }

Issues:

import androidx.core.view.updateLayoutParams;

not available for Java - Kotlin function

Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());

getInsets - Non-static method 'getInsets(int)' cannot be referenced from a static context

v.updateLayoutParams(params -> { if (params instanceof MarginLayoutParams) { MarginLayoutParams marginParams = (MarginLayoutParams) params;

generates errors because we cannot use "updateLayoutParams"

Dead end, or light at the end of the tunnel ?

I'm not sure if functions visible in app inventor can be static. Remove 'static' from the function.

I am going to close this one down for now. Needs a fresh approach methinks.