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}