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        setStatusAndNavigationBarColors(activity, view, isLightMode(activity), raisedStatusBar);
21    }
22
23    public static void setStatusAndNavigationBarColors(
24            final Activity activity,
25            final View view,
26            final boolean isLightMode,
27            final boolean raisedStatusBar) {
28        final var window = activity.getWindow();
29        final var flags = view.getSystemUiVisibility();
30        // an elevation of 4 matches the MaterialToolbar elevation
31        if (raisedStatusBar) {
32            window.setStatusBarColor(SurfaceColors.SURFACE_5.getColor(activity));
33        } else {
34            window.setStatusBarColor(SurfaceColors.SURFACE_0.getColor(activity));
35        }
36        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
37            window.setNavigationBarColor(SurfaceColors.SURFACE_1.getColor(activity));
38            if (isLightMode) {
39                view.setSystemUiVisibility(
40                        flags
41                                | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
42                                | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
43            }
44        } else if (isLightMode) {
45            view.setSystemUiVisibility(flags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
46        }
47    }
48
49    private static boolean isLightMode(final Context context) {
50        final int nightModeFlags =
51                context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
52        return nightModeFlags != Configuration.UI_MODE_NIGHT_YES;
53    }
54
55    public static boolean isNightMode(final Context context) {
56        return (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)
57                == Configuration.UI_MODE_NIGHT_YES;
58    }
59}