• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.hardware.display;
18 
19 import android.annotation.IntDef;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 import java.lang.annotation.Retention;
24 import java.lang.annotation.RetentionPolicy;
25 
26 /**
27  * Data about the current brightness state.
28  * {@see android.view.Display.getBrightnessInfo()}
29  *
30  * @hide
31  */
32 public final class BrightnessInfo implements Parcelable {
33 
34     @IntDef(prefix = {"HIGH_BRIGHTNESS_MODE_"}, value = {
35             HIGH_BRIGHTNESS_MODE_OFF,
36             HIGH_BRIGHTNESS_MODE_SUNLIGHT,
37             HIGH_BRIGHTNESS_MODE_HDR
38     })
39     @Retention(RetentionPolicy.SOURCE)
40     public @interface HighBrightnessMode {}
41 
42     /**
43      * High brightness mode is OFF. The high brightness range is not currently accessible to the
44      * user.
45      */
46     public static final int HIGH_BRIGHTNESS_MODE_OFF = 0;
47 
48     /**
49      * High brightness mode is ON due to high ambient light (sunlight). The high brightness range is
50      * currently accessible to the user.
51      */
52     public static final int HIGH_BRIGHTNESS_MODE_SUNLIGHT = 1;
53 
54     /**
55      * High brightness mode is ON due to high ambient light (sunlight). The high brightness range is
56      * currently accessible to the user.
57      */
58     public static final int HIGH_BRIGHTNESS_MODE_HDR = 2;
59 
60     @IntDef(prefix = {"BRIGHTNESS_MAX_REASON_"}, value = {
61             BRIGHTNESS_MAX_REASON_NONE,
62             BRIGHTNESS_MAX_REASON_THERMAL,
63             BRIGHTNESS_MAX_REASON_POWER_IC,
64             BRIGHTNESS_MAX_REASON_WEAR_BEDTIME_MODE
65     })
66     @Retention(RetentionPolicy.SOURCE)
67     public @interface BrightnessMaxReason {}
68 
69     /**
70      * Maximum brightness is unrestricted.
71      */
72     public static final int BRIGHTNESS_MAX_REASON_NONE = 0;
73 
74     /**
75      * Maximum brightness is restricted due to thermal throttling.
76      */
77     public static final int BRIGHTNESS_MAX_REASON_THERMAL = 1;
78 
79     /**
80      * Maximum brightness is restricted due to power throttling.
81      */
82     public static final int BRIGHTNESS_MAX_REASON_POWER_IC = 2;
83 
84     /**
85      * Maximum brightness is restricted due to the Wear bedtime mode.
86      */
87     public static final int BRIGHTNESS_MAX_REASON_WEAR_BEDTIME_MODE = 3;
88 
89     /** Brightness */
90     public final float brightness;
91 
92     /** Brightness after {@link DisplayPowerController} adjustments */
93     public final float adjustedBrightness;
94 
95     /** Current minimum supported brightness. */
96     public final float brightnessMinimum;
97 
98     /** Current maximum supported brightness. */
99     public final float brightnessMaximum;
100 
101     /** Brightness values greater than this point are only used in High Brightness Mode. */
102     public final float highBrightnessTransitionPoint;
103 
104     /**
105      * Current state of high brightness mode.
106      * Can be any of HIGH_BRIGHTNESS_MODE_* values.
107      */
108     public final int highBrightnessMode;
109 
110     /**
111      * The current reason for restricting maximum brightness.
112      * Can be any of BRIGHTNESS_MAX_REASON_* values.
113      */
114     public final int brightnessMaxReason;
115 
116     /**
117      * Whether the current brightness value is overridden by the application window via
118      * {@link android.view.WindowManager.LayoutParams#screenBrightness}.
119      */
120     public final boolean isBrightnessOverrideByWindow;
121 
BrightnessInfo(float brightness, float brightnessMinimum, float brightnessMaximum, @HighBrightnessMode int highBrightnessMode, float highBrightnessTransitionPoint, @BrightnessMaxReason int brightnessMaxReason)122     public BrightnessInfo(float brightness, float brightnessMinimum, float brightnessMaximum,
123             @HighBrightnessMode int highBrightnessMode, float highBrightnessTransitionPoint,
124             @BrightnessMaxReason int brightnessMaxReason) {
125         this(brightness, brightness, brightnessMinimum, brightnessMaximum, highBrightnessMode,
126                 highBrightnessTransitionPoint, brightnessMaxReason,
127                 false /* isBrightnessOverrideByWindow */);
128     }
129 
BrightnessInfo(float brightness, float adjustedBrightness, float brightnessMinimum, float brightnessMaximum, @HighBrightnessMode int highBrightnessMode, float highBrightnessTransitionPoint, @BrightnessMaxReason int brightnessMaxReason, boolean isBrightnessOverrideByWindow)130     public BrightnessInfo(float brightness, float adjustedBrightness, float brightnessMinimum,
131             float brightnessMaximum, @HighBrightnessMode int highBrightnessMode,
132             float highBrightnessTransitionPoint, @BrightnessMaxReason int brightnessMaxReason,
133             boolean isBrightnessOverrideByWindow) {
134         this.brightness = brightness;
135         this.adjustedBrightness = adjustedBrightness;
136         this.brightnessMinimum = brightnessMinimum;
137         this.brightnessMaximum = brightnessMaximum;
138         this.highBrightnessMode = highBrightnessMode;
139         this.highBrightnessTransitionPoint = highBrightnessTransitionPoint;
140         this.brightnessMaxReason =  brightnessMaxReason;
141         this.isBrightnessOverrideByWindow = isBrightnessOverrideByWindow;
142     }
143 
144     /**
145      * @return User-friendly string for specified {@link HighBrightnessMode} parameter.
146      */
hbmToString(@ighBrightnessMode int highBrightnessMode)147     public static String hbmToString(@HighBrightnessMode int highBrightnessMode) {
148         switch (highBrightnessMode) {
149             case HIGH_BRIGHTNESS_MODE_OFF:
150                 return "off";
151             case HIGH_BRIGHTNESS_MODE_HDR:
152                 return "hdr";
153             case HIGH_BRIGHTNESS_MODE_SUNLIGHT:
154                 return "sunlight";
155         }
156         return "invalid";
157     }
158 
159     /**
160      * @return User-friendly string for specified {@link BrightnessMaxReason} parameter.
161      */
briMaxReasonToString(@rightnessMaxReason int reason)162     public static String briMaxReasonToString(@BrightnessMaxReason int reason) {
163         switch (reason) {
164             case BRIGHTNESS_MAX_REASON_NONE:
165                 return "none";
166             case BRIGHTNESS_MAX_REASON_THERMAL:
167                 return "thermal";
168             case BRIGHTNESS_MAX_REASON_POWER_IC:
169                 return "power IC";
170             case BRIGHTNESS_MAX_REASON_WEAR_BEDTIME_MODE:
171                 return "wear bedtime";
172         }
173         return "invalid";
174     }
175 
176     @Override
describeContents()177     public int describeContents() {
178         return 0;
179     }
180 
181     @Override
writeToParcel(Parcel dest, int flags)182     public void writeToParcel(Parcel dest, int flags) {
183         dest.writeFloat(brightness);
184         dest.writeFloat(adjustedBrightness);
185         dest.writeFloat(brightnessMinimum);
186         dest.writeFloat(brightnessMaximum);
187         dest.writeInt(highBrightnessMode);
188         dest.writeFloat(highBrightnessTransitionPoint);
189         dest.writeInt(brightnessMaxReason);
190         dest.writeBoolean(isBrightnessOverrideByWindow);
191     }
192 
193     public static final @android.annotation.NonNull Creator<BrightnessInfo> CREATOR =
194             new Creator<BrightnessInfo>() {
195                 @Override
196                 public BrightnessInfo createFromParcel(Parcel source) {
197                     return new BrightnessInfo(source);
198                 }
199 
200                 @Override
201                 public BrightnessInfo[] newArray(int size) {
202                     return new BrightnessInfo[size];
203                 }
204             };
205 
BrightnessInfo(Parcel source)206     private BrightnessInfo(Parcel source) {
207         brightness = source.readFloat();
208         adjustedBrightness = source.readFloat();
209         brightnessMinimum = source.readFloat();
210         brightnessMaximum = source.readFloat();
211         highBrightnessMode = source.readInt();
212         highBrightnessTransitionPoint = source.readFloat();
213         brightnessMaxReason = source.readInt();
214         isBrightnessOverrideByWindow = source.readBoolean();
215     }
216 
217 }
218