1package eu.siacs.conversations.ui;
 2
 3import android.app.Activity;
 4import android.content.Context;
 5import android.content.res.Configuration;
 6import android.os.Build;
 7import android.view.View;
 8import com.google.android.material.elevation.SurfaceColors;
 9
10public final class Activities {
11
12    private Activities() {}
13
14    public static void setStatusAndNavigationBarColors(final Activity activity, final View view) {
15        setStatusAndNavigationBarColors(activity, view, false);
16    }
17
18    public static void setStatusAndNavigationBarColors(
19            final Activity activity, final View view, final boolean raisedStatusBar) {
20        final var isLightMode = isLightMode(activity);
21        final var window = activity.getWindow();
22        final var flags = view.getSystemUiVisibility();
23        // an elevation of 4 matches the MaterialToolbar elevation
24        if (raisedStatusBar) {
25            window.setStatusBarColor(SurfaceColors.SURFACE_5.getColor(activity));
26        } else {
27            window.setStatusBarColor(SurfaceColors.SURFACE_0.getColor(activity));
28        }
29        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
30            window.setNavigationBarColor(SurfaceColors.SURFACE_1.getColor(activity));
31            if (isLightMode) {
32                view.setSystemUiVisibility(
33                        flags
34                                | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
35                                | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
36            }
37        } else if (isLightMode) {
38            view.setSystemUiVisibility(flags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
39        }
40    }
41
42    private static boolean isLightMode(final Context context) {
43        final int nightModeFlags =
44                context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
45        return nightModeFlags != Configuration.UI_MODE_NIGHT_YES;
46    }
47
48    public static boolean isNightMode(final Context context) {
49        return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)
50                == Configuration.UI_MODE_NIGHT_YES;
51    }
52}