termux-app
91 строка · 2.6 Кб
1package com.termux.shared.theme;
2
3import androidx.annotation.NonNull;
4import androidx.annotation.Nullable;
5import androidx.appcompat.app.AppCompatDelegate;
6
7import com.termux.shared.logger.Logger;
8
9/** The modes used by to decide night mode for themes. */
10public enum NightMode {
11
12/** Night theme should be enabled. */
13TRUE("true", AppCompatDelegate.MODE_NIGHT_YES),
14
15/** Dark theme should be enabled. */
16FALSE("false", AppCompatDelegate.MODE_NIGHT_NO),
17
18/**
19* Use night or dark theme depending on system night mode.
20* https://developer.android.com/guide/topics/resources/providing-resources#NightQualifier
21*/
22SYSTEM("system", AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
23
24/** The current app wide night mode used by various libraries. Defaults to {@link #SYSTEM}. */
25private static NightMode APP_NIGHT_MODE;
26
27private static final String LOG_TAG = "NightMode";
28
29private final String name;
30private final @AppCompatDelegate.NightMode int mode;
31
32NightMode(final String name, int mode) {
33this.name = name;
34this.mode = mode;
35}
36
37public String getName() {
38return name;
39}
40
41public int getMode() {
42return mode;
43}
44
45
46/** Get {@link NightMode} for {@code name} if found, otherwise {@code null}. */
47@Nullable
48public static NightMode modeOf(String name) {
49for (NightMode v : NightMode.values()) {
50if (v.name.equals(name)) {
51return v;
52}
53}
54
55return null;
56}
57
58/** Get {@link NightMode} for {@code name} if found, otherwise {@code def}. */
59@NonNull
60public static NightMode modeOf(@Nullable String name, @NonNull NightMode def) {
61NightMode nightMode = modeOf(name);
62return nightMode != null ? nightMode : def;
63}
64
65
66/** Set {@link #APP_NIGHT_MODE}. */
67public static void setAppNightMode(@Nullable String name) {
68if (name == null || name.isEmpty()) {
69APP_NIGHT_MODE = SYSTEM;
70} else {
71NightMode nightMode = NightMode.modeOf(name);
72if (nightMode == null) {
73Logger.logError(LOG_TAG, "Invalid APP_NIGHT_MODE \"" + name + "\"");
74return;
75}
76APP_NIGHT_MODE = nightMode;
77}
78
79Logger.logVerbose(LOG_TAG, "Set APP_NIGHT_MODE to \"" + APP_NIGHT_MODE.getName() + "\"");
80}
81
82/** Get {@link #APP_NIGHT_MODE}. */
83@NonNull
84public static NightMode getAppNightMode() {
85if (APP_NIGHT_MODE == null)
86APP_NIGHT_MODE = SYSTEM;
87
88return APP_NIGHT_MODE;
89}
90
91}
92