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}