1 #ifndef COM_ANDROID_SERVER_DISPLAY_CONFIG_H
2 #define COM_ANDROID_SERVER_DISPLAY_CONFIG_H
3 
4 #include <array>
5 #include <map>
6 #include <optional>
7 #include <string>
8 #include <vector>
9 #include <sstream>
10 
11 #if __has_include(<libxml/parser.h>)
12 #include <libxml/parser.h>
13 #include <libxml/xinclude.h>
14 #else
15 #error Require libxml2 library. Please add libxml2 to shared_libs or static_libs
16 #endif
17 
18 #include "com_android_server_display_config_enums.h"
19 
20 namespace com {
21     namespace android {
22         namespace server {
23             namespace display {
24                 namespace config {
25                     class DisplayQuirks;
26                     class LuxThrottling;
27                     class BrightnessLimitMap;
28                     class EvenDimmerMode;
29                     class HighBrightnessMode;
30                     class HbmTiming;
31                     class HdrBrightnessConfig;
32                     class ThermalThrottling;
33                     class RefreshRateThrottlingMap;
34                     class RefreshRateThrottlingPoint;
35                     class BrightnessThrottlingMap;
36                     class BrightnessThrottlingPoint;
37                     class PowerThrottlingMap;
38                     class PowerThrottlingPoint;
39                     class PowerThrottlingConfig;
40                     class NitsMap;
41                     class Point;
42                     class ComprehensiveBrightnessMap;
43                     class BrightnessPoint;
44                     class SdrHdrRatioMap;
45                     class SdrHdrRatioPoint;
46                     class SensorDetails;
47                     class RefreshRateRange;
48                     class DensityMapping;
49                     class Density;
50                     class Thresholds;
51                     class BrightnessThresholds;
52                     class ThresholdPoints;
53                     class ThresholdPoint;
54                     class AutoBrightness;
55                     class LuxToBrightnessMapping;
56                     class DisplayBrightnessPoint;
57                     class RefreshRateConfigs;
58                     class RefreshRateZoneProfiles;
59                     class RefreshRateZone;
60                     class BlockingZoneConfig;
61                     class BlockingZoneThreshold;
62                     class IntegerArray;
63                     class FloatArray;
64                     class UsiVersion;
65                     class NonNegativeFloatToFloatPoint;
66                     class NonNegativeFloatToFloatMap;
67                     class IdleScreenRefreshRateTimeout;
68                     class IdleScreenRefreshRateTimeoutLuxThresholds;
69                     class IdleScreenRefreshRateTimeoutLuxThresholdPoint;
70                     class DisplayConfiguration;
71                     std::optional<DisplayConfiguration> read(const char* configFile);
72 
73                     std::optional<DisplayConfiguration> parse(const char* xml);
74 
75                     class DisplayQuirks {
76                         private:
77                         const std::vector<std::string> quirk_;
78                         public:
79                         explicit DisplayQuirks(std::vector<std::string> quirk);
80                         const std::vector<std::string>& getQuirk() const;
81                         bool hasQuirk() const;
82                         const std::string* getFirstQuirk() const;
83                         static DisplayQuirks read(xmlNode *root);
84                     };
85 
86                     class LuxThrottling {
87                         private:
88                         const std::vector<BrightnessLimitMap> brightnessLimitMap_;
89                         public:
90                         explicit LuxThrottling(std::vector<BrightnessLimitMap> brightnessLimitMap);
91                         const std::vector<BrightnessLimitMap>& getBrightnessLimitMap() const;
92                         bool hasBrightnessLimitMap() const;
93                         const BrightnessLimitMap* getFirstBrightnessLimitMap() const;
94                         static LuxThrottling read(xmlNode *root);
95                     };
96 
97                     class BrightnessLimitMap {
98                         private:
99                         const std::optional<PredefinedBrightnessLimitNames> type_;
100                         const std::vector<NonNegativeFloatToFloatMap> map_;
101                         public:
102                         BrightnessLimitMap(std::optional<PredefinedBrightnessLimitNames> type, std::vector<NonNegativeFloatToFloatMap> map);
103                         const PredefinedBrightnessLimitNames& getType() const;
104                         bool hasType() const;
105                         const std::vector<NonNegativeFloatToFloatMap>& getMap() const;
106                         bool hasMap() const;
107                         const NonNegativeFloatToFloatMap* getFirstMap() const;
108                         static BrightnessLimitMap read(xmlNode *root);
109                     };
110 
111                     class EvenDimmerMode {
112                         private:
113                         const std::optional<double> transitionPoint_;
114                         const std::vector<ComprehensiveBrightnessMap> brightnessMapping_;
115                         const std::vector<NitsMap> luxToMinimumNitsMap_;
116                         const std::optional<bool> enabled_;
117                         public:
118                         EvenDimmerMode(std::optional<double> transitionPoint, std::vector<ComprehensiveBrightnessMap> brightnessMapping, std::vector<NitsMap> luxToMinimumNitsMap, std::optional<bool> enabled);
119                         const double& getTransitionPoint() const;
120                         bool hasTransitionPoint() const;
121                         const std::vector<ComprehensiveBrightnessMap>& getBrightnessMapping() const;
122                         bool hasBrightnessMapping() const;
123                         const ComprehensiveBrightnessMap* getFirstBrightnessMapping() const;
124                         const std::vector<NitsMap>& getLuxToMinimumNitsMap() const;
125                         bool hasLuxToMinimumNitsMap() const;
126                         const NitsMap* getFirstLuxToMinimumNitsMap() const;
127                         const bool& getEnabled() const;
128                         bool hasEnabled() const;
129                         static EvenDimmerMode read(xmlNode *root);
130                     };
131 
132                     class HighBrightnessMode {
133                         private:
134                         const std::optional<double> transitionPoint_all_;
135                         const std::optional<double> minimumLux_all_;
136                         const std::vector<HbmTiming> timing_all_;
137                         const std::vector<RefreshRateRange> refreshRate_all_;
138                         const std::optional<bool> allowInLowPowerMode_all_;
139                         const std::optional<double> minimumHdrPercentOfScreen_all_;
140                         const std::vector<SdrHdrRatioMap> sdrHdrRatioMap_all_;
141                         const std::optional<bool> enabled_;
142                         public:
143                         HighBrightnessMode(std::optional<double> transitionPoint_all, std::optional<double> minimumLux_all, std::vector<HbmTiming> timing_all, std::vector<RefreshRateRange> refreshRate_all, std::optional<bool> allowInLowPowerMode_all, std::optional<double> minimumHdrPercentOfScreen_all, std::vector<SdrHdrRatioMap> sdrHdrRatioMap_all, std::optional<bool> enabled);
144                         const double& getTransitionPoint_all() const;
145                         bool hasTransitionPoint_all() const;
146                         const double& getMinimumLux_all() const;
147                         bool hasMinimumLux_all() const;
148                         const std::vector<HbmTiming>& getTiming_all() const;
149                         bool hasTiming_all() const;
150                         const HbmTiming* getFirstTiming_all() const;
151                         const std::vector<RefreshRateRange>& getRefreshRate_all() const;
152                         bool hasRefreshRate_all() const;
153                         const RefreshRateRange* getFirstRefreshRate_all() const;
154                         const bool& getAllowInLowPowerMode_all() const;
155                         bool hasAllowInLowPowerMode_all() const;
156                         const double& getMinimumHdrPercentOfScreen_all() const;
157                         bool hasMinimumHdrPercentOfScreen_all() const;
158                         const std::vector<SdrHdrRatioMap>& getSdrHdrRatioMap_all() const;
159                         bool hasSdrHdrRatioMap_all() const;
160                         const SdrHdrRatioMap* getFirstSdrHdrRatioMap_all() const;
161                         const bool& getEnabled() const;
162                         bool hasEnabled() const;
163                         static HighBrightnessMode read(xmlNode *root);
164                     };
165 
166                     class HbmTiming {
167                         private:
168                         const std::optional<int64_t> timeWindowSecs_all_;
169                         const std::optional<int64_t> timeMaxSecs_all_;
170                         const std::optional<int64_t> timeMinSecs_all_;
171                         public:
172                         HbmTiming(std::optional<int64_t> timeWindowSecs_all, std::optional<int64_t> timeMaxSecs_all, std::optional<int64_t> timeMinSecs_all);
173                         const int64_t& getTimeWindowSecs_all() const;
174                         bool hasTimeWindowSecs_all() const;
175                         const int64_t& getTimeMaxSecs_all() const;
176                         bool hasTimeMaxSecs_all() const;
177                         const int64_t& getTimeMinSecs_all() const;
178                         bool hasTimeMinSecs_all() const;
179                         static HbmTiming read(xmlNode *root);
180                     };
181 
182                     class HdrBrightnessConfig {
183                         private:
184                         const std::vector<NonNegativeFloatToFloatMap> brightnessMap_;
185                         const std::optional<int64_t> brightnessIncreaseDebounceMillis_;
186                         const std::optional<int64_t> brightnessDecreaseDebounceMillis_;
187                         const std::optional<double> screenBrightnessRampIncrease_;
188                         const std::optional<double> screenBrightnessRampDecrease_;
189                         const std::optional<double> minimumHdrPercentOfScreenForNbm_;
190                         const std::optional<double> minimumHdrPercentOfScreenForHbm_;
191                         const std::optional<bool> allowInLowPowerMode_;
192                         const std::vector<NonNegativeFloatToFloatMap> sdrHdrRatioMap_;
193                         public:
194                         HdrBrightnessConfig(std::vector<NonNegativeFloatToFloatMap> brightnessMap, std::optional<int64_t> brightnessIncreaseDebounceMillis, std::optional<int64_t> brightnessDecreaseDebounceMillis, std::optional<double> screenBrightnessRampIncrease, std::optional<double> screenBrightnessRampDecrease, std::optional<double> minimumHdrPercentOfScreenForNbm, std::optional<double> minimumHdrPercentOfScreenForHbm, std::optional<bool> allowInLowPowerMode, std::vector<NonNegativeFloatToFloatMap> sdrHdrRatioMap);
195                         const std::vector<NonNegativeFloatToFloatMap>& getBrightnessMap() const;
196                         bool hasBrightnessMap() const;
197                         const NonNegativeFloatToFloatMap* getFirstBrightnessMap() const;
198                         const int64_t& getBrightnessIncreaseDebounceMillis() const;
199                         bool hasBrightnessIncreaseDebounceMillis() const;
200                         const int64_t& getBrightnessDecreaseDebounceMillis() const;
201                         bool hasBrightnessDecreaseDebounceMillis() const;
202                         const double& getScreenBrightnessRampIncrease() const;
203                         bool hasScreenBrightnessRampIncrease() const;
204                         const double& getScreenBrightnessRampDecrease() const;
205                         bool hasScreenBrightnessRampDecrease() const;
206                         const double& getMinimumHdrPercentOfScreenForNbm() const;
207                         bool hasMinimumHdrPercentOfScreenForNbm() const;
208                         const double& getMinimumHdrPercentOfScreenForHbm() const;
209                         bool hasMinimumHdrPercentOfScreenForHbm() const;
210                         const bool& getAllowInLowPowerMode() const;
211                         bool hasAllowInLowPowerMode() const;
212                         const std::vector<NonNegativeFloatToFloatMap>& getSdrHdrRatioMap() const;
213                         bool hasSdrHdrRatioMap() const;
214                         const NonNegativeFloatToFloatMap* getFirstSdrHdrRatioMap() const;
215                         static HdrBrightnessConfig read(xmlNode *root);
216                     };
217 
218                     class ThermalThrottling {
219                         private:
220                         const std::vector<BrightnessThrottlingMap> brightnessThrottlingMap_;
221                         const std::vector<RefreshRateThrottlingMap> refreshRateThrottlingMap_;
222                         public:
223                         ThermalThrottling(std::vector<BrightnessThrottlingMap> brightnessThrottlingMap, std::vector<RefreshRateThrottlingMap> refreshRateThrottlingMap);
224                         const std::vector<BrightnessThrottlingMap>& getBrightnessThrottlingMap() const;
225                         bool hasBrightnessThrottlingMap() const;
226                         const BrightnessThrottlingMap* getFirstBrightnessThrottlingMap() const;
227                         const std::vector<RefreshRateThrottlingMap>& getRefreshRateThrottlingMap() const;
228                         bool hasRefreshRateThrottlingMap() const;
229                         const RefreshRateThrottlingMap* getFirstRefreshRateThrottlingMap() const;
230                         static ThermalThrottling read(xmlNode *root);
231                     };
232 
233                     class RefreshRateThrottlingMap {
234                         private:
235                         const std::vector<RefreshRateThrottlingPoint> refreshRateThrottlingPoint_;
236                         const std::optional<std::string> id_;
237                         public:
238                         RefreshRateThrottlingMap(std::vector<RefreshRateThrottlingPoint> refreshRateThrottlingPoint, std::optional<std::string> id);
239                         const std::vector<RefreshRateThrottlingPoint>& getRefreshRateThrottlingPoint() const;
240                         bool hasRefreshRateThrottlingPoint() const;
241                         const RefreshRateThrottlingPoint* getFirstRefreshRateThrottlingPoint() const;
242                         const std::string& getId() const;
243                         bool hasId() const;
244                         static RefreshRateThrottlingMap read(xmlNode *root);
245                     };
246 
247                     class RefreshRateThrottlingPoint {
248                         private:
249                         const std::optional<ThermalStatus> thermalStatus_;
250                         const std::vector<RefreshRateRange> refreshRateRange_;
251                         public:
252                         RefreshRateThrottlingPoint(std::optional<ThermalStatus> thermalStatus, std::vector<RefreshRateRange> refreshRateRange);
253                         const ThermalStatus& getThermalStatus() const;
254                         bool hasThermalStatus() const;
255                         const std::vector<RefreshRateRange>& getRefreshRateRange() const;
256                         bool hasRefreshRateRange() const;
257                         const RefreshRateRange* getFirstRefreshRateRange() const;
258                         static RefreshRateThrottlingPoint read(xmlNode *root);
259                     };
260 
261                     class BrightnessThrottlingMap {
262                         private:
263                         const std::vector<BrightnessThrottlingPoint> brightnessThrottlingPoint_;
264                         const std::optional<std::string> id_;
265                         public:
266                         BrightnessThrottlingMap(std::vector<BrightnessThrottlingPoint> brightnessThrottlingPoint, std::optional<std::string> id);
267                         const std::vector<BrightnessThrottlingPoint>& getBrightnessThrottlingPoint() const;
268                         bool hasBrightnessThrottlingPoint() const;
269                         const BrightnessThrottlingPoint* getFirstBrightnessThrottlingPoint() const;
270                         const std::string& getId() const;
271                         bool hasId() const;
272                         static BrightnessThrottlingMap read(xmlNode *root);
273                     };
274 
275                     class BrightnessThrottlingPoint {
276                         private:
277                         const std::optional<ThermalStatus> thermalStatus_;
278                         const std::optional<double> brightness_;
279                         public:
280                         BrightnessThrottlingPoint(std::optional<ThermalStatus> thermalStatus, std::optional<double> brightness);
281                         const ThermalStatus& getThermalStatus() const;
282                         bool hasThermalStatus() const;
283                         const double& getBrightness() const;
284                         bool hasBrightness() const;
285                         static BrightnessThrottlingPoint read(xmlNode *root);
286                     };
287 
288                     class PowerThrottlingMap {
289                         private:
290                         const std::vector<PowerThrottlingPoint> powerThrottlingPoint_;
291                         const std::optional<std::string> id_;
292                         public:
293                         PowerThrottlingMap(std::vector<PowerThrottlingPoint> powerThrottlingPoint, std::optional<std::string> id);
294                         const std::vector<PowerThrottlingPoint>& getPowerThrottlingPoint() const;
295                         bool hasPowerThrottlingPoint() const;
296                         const PowerThrottlingPoint* getFirstPowerThrottlingPoint() const;
297                         const std::string& getId() const;
298                         bool hasId() const;
299                         static PowerThrottlingMap read(xmlNode *root);
300                     };
301 
302                     class PowerThrottlingPoint {
303                         private:
304                         const std::optional<ThermalStatus> thermalStatus_;
305                         const std::optional<double> powerQuotaMilliWatts_;
306                         public:
307                         PowerThrottlingPoint(std::optional<ThermalStatus> thermalStatus, std::optional<double> powerQuotaMilliWatts);
308                         const ThermalStatus& getThermalStatus() const;
309                         bool hasThermalStatus() const;
310                         const double& getPowerQuotaMilliWatts() const;
311                         bool hasPowerQuotaMilliWatts() const;
312                         static PowerThrottlingPoint read(xmlNode *root);
313                     };
314 
315                     class PowerThrottlingConfig {
316                         private:
317                         const std::optional<double> brightnessLowestCapAllowed_;
318                         const std::optional<double> customAnimationRate_;
319                         const std::optional<int64_t> pollingWindowMaxMillis_;
320                         const std::optional<int64_t> pollingWindowMinMillis_;
321                         const std::vector<PowerThrottlingMap> powerThrottlingMap_;
322                         public:
323                         PowerThrottlingConfig(std::optional<double> brightnessLowestCapAllowed, std::optional<double> customAnimationRate, std::optional<int64_t> pollingWindowMaxMillis, std::optional<int64_t> pollingWindowMinMillis, std::vector<PowerThrottlingMap> powerThrottlingMap);
324                         const double& getBrightnessLowestCapAllowed() const;
325                         bool hasBrightnessLowestCapAllowed() const;
326                         const double& getCustomAnimationRate() const;
327                         bool hasCustomAnimationRate() const;
328                         const int64_t& getPollingWindowMaxMillis() const;
329                         bool hasPollingWindowMaxMillis() const;
330                         const int64_t& getPollingWindowMinMillis() const;
331                         bool hasPollingWindowMinMillis() const;
332                         const std::vector<PowerThrottlingMap>& getPowerThrottlingMap() const;
333                         bool hasPowerThrottlingMap() const;
334                         const PowerThrottlingMap* getFirstPowerThrottlingMap() const;
335                         static PowerThrottlingConfig read(xmlNode *root);
336                     };
337 
338                     class NitsMap {
339                         private:
340                         const std::vector<Point> point_;
341                         const std::optional<std::string> interpolation_;
342                         public:
343                         NitsMap(std::vector<Point> point, std::optional<std::string> interpolation);
344                         const std::vector<Point>& getPoint() const;
345                         bool hasPoint() const;
346                         const Point* getFirstPoint() const;
347                         const std::string& getInterpolation() const;
348                         bool hasInterpolation() const;
349                         static NitsMap read(xmlNode *root);
350                     };
351 
352                     class Point {
353                         private:
354                         const std::optional<double> value_;
355                         const std::optional<double> nits_;
356                         public:
357                         Point(std::optional<double> value, std::optional<double> nits);
358                         const double& getValue() const;
359                         bool hasValue() const;
360                         const double& getNits() const;
361                         bool hasNits() const;
362                         static Point read(xmlNode *root);
363                     };
364 
365                     class ComprehensiveBrightnessMap {
366                         private:
367                         const std::vector<BrightnessPoint> brightnessPoint_;
368                         public:
369                         explicit ComprehensiveBrightnessMap(std::vector<BrightnessPoint> brightnessPoint);
370                         const std::vector<BrightnessPoint>& getBrightnessPoint() const;
371                         bool hasBrightnessPoint() const;
372                         const BrightnessPoint* getFirstBrightnessPoint() const;
373                         static ComprehensiveBrightnessMap read(xmlNode *root);
374                     };
375 
376                     class BrightnessPoint {
377                         private:
378                         const std::optional<double> nits_;
379                         const std::optional<double> backlight_;
380                         const std::optional<double> brightness_;
381                         public:
382                         BrightnessPoint(std::optional<double> nits, std::optional<double> backlight, std::optional<double> brightness);
383                         const double& getNits() const;
384                         bool hasNits() const;
385                         const double& getBacklight() const;
386                         bool hasBacklight() const;
387                         const double& getBrightness() const;
388                         bool hasBrightness() const;
389                         static BrightnessPoint read(xmlNode *root);
390                     };
391 
392                     class SdrHdrRatioMap {
393                         private:
394                         const std::vector<SdrHdrRatioPoint> point_;
395                         public:
396                         explicit SdrHdrRatioMap(std::vector<SdrHdrRatioPoint> point);
397                         const std::vector<SdrHdrRatioPoint>& getPoint() const;
398                         bool hasPoint() const;
399                         const SdrHdrRatioPoint* getFirstPoint() const;
400                         static SdrHdrRatioMap read(xmlNode *root);
401                     };
402 
403                     class SdrHdrRatioPoint {
404                         private:
405                         const std::optional<double> sdrNits_;
406                         const std::optional<double> hdrRatio_;
407                         public:
408                         SdrHdrRatioPoint(std::optional<double> sdrNits, std::optional<double> hdrRatio);
409                         const double& getSdrNits() const;
410                         bool hasSdrNits() const;
411                         const double& getHdrRatio() const;
412                         bool hasHdrRatio() const;
413                         static SdrHdrRatioPoint read(xmlNode *root);
414                     };
415 
416                     class SensorDetails {
417                         private:
418                         const std::optional<std::string> type_;
419                         const std::optional<std::string> name_;
420                         const std::vector<RefreshRateRange> refreshRate_;
421                         const std::vector<NonNegativeFloatToFloatMap> supportedModes_;
422                         const std::optional<std::string> featureFlag_;
423                         public:
424                         SensorDetails(std::optional<std::string> type, std::optional<std::string> name, std::vector<RefreshRateRange> refreshRate, std::vector<NonNegativeFloatToFloatMap> supportedModes, std::optional<std::string> featureFlag);
425                         const std::string& getType() const;
426                         bool hasType() const;
427                         const std::string& getName() const;
428                         bool hasName() const;
429                         const std::vector<RefreshRateRange>& getRefreshRate() const;
430                         bool hasRefreshRate() const;
431                         const RefreshRateRange* getFirstRefreshRate() const;
432                         const std::vector<NonNegativeFloatToFloatMap>& getSupportedModes() const;
433                         bool hasSupportedModes() const;
434                         const NonNegativeFloatToFloatMap* getFirstSupportedModes() const;
435                         const std::string& getFeatureFlag() const;
436                         bool hasFeatureFlag() const;
437                         static SensorDetails read(xmlNode *root);
438                     };
439 
440                     class RefreshRateRange {
441                         private:
442                         const std::optional<int64_t> minimum_;
443                         const std::optional<int64_t> maximum_;
444                         public:
445                         RefreshRateRange(std::optional<int64_t> minimum, std::optional<int64_t> maximum);
446                         const int64_t& getMinimum() const;
447                         bool hasMinimum() const;
448                         const int64_t& getMaximum() const;
449                         bool hasMaximum() const;
450                         static RefreshRateRange read(xmlNode *root);
451                     };
452 
453                     class DensityMapping {
454                         private:
455                         const std::vector<Density> density_;
456                         public:
457                         explicit DensityMapping(std::vector<Density> density);
458                         const std::vector<Density>& getDensity() const;
459                         bool hasDensity() const;
460                         const Density* getFirstDensity() const;
461                         static DensityMapping read(xmlNode *root);
462                     };
463 
464                     class Density {
465                         private:
466                         const std::optional<int64_t> width_;
467                         const std::optional<int64_t> height_;
468                         const std::optional<int64_t> density_;
469                         public:
470                         Density(std::optional<int64_t> width, std::optional<int64_t> height, std::optional<int64_t> density);
471                         const int64_t& getWidth() const;
472                         bool hasWidth() const;
473                         const int64_t& getHeight() const;
474                         bool hasHeight() const;
475                         const int64_t& getDensity() const;
476                         bool hasDensity() const;
477                         static Density read(xmlNode *root);
478                     };
479 
480                     class Thresholds {
481                         private:
482                         const std::vector<BrightnessThresholds> brighteningThresholds_;
483                         const std::vector<BrightnessThresholds> darkeningThresholds_;
484                         public:
485                         Thresholds(std::vector<BrightnessThresholds> brighteningThresholds, std::vector<BrightnessThresholds> darkeningThresholds);
486                         const std::vector<BrightnessThresholds>& getBrighteningThresholds() const;
487                         bool hasBrighteningThresholds() const;
488                         const BrightnessThresholds* getFirstBrighteningThresholds() const;
489                         const std::vector<BrightnessThresholds>& getDarkeningThresholds() const;
490                         bool hasDarkeningThresholds() const;
491                         const BrightnessThresholds* getFirstDarkeningThresholds() const;
492                         static Thresholds read(xmlNode *root);
493                     };
494 
495                     class BrightnessThresholds {
496                         private:
497                         const std::optional<double> minimum_;
498                         const std::vector<ThresholdPoints> brightnessThresholdPoints_;
499                         public:
500                         BrightnessThresholds(std::optional<double> minimum, std::vector<ThresholdPoints> brightnessThresholdPoints);
501                         const double& getMinimum() const;
502                         bool hasMinimum() const;
503                         const std::vector<ThresholdPoints>& getBrightnessThresholdPoints() const;
504                         bool hasBrightnessThresholdPoints() const;
505                         const ThresholdPoints* getFirstBrightnessThresholdPoints() const;
506                         static BrightnessThresholds read(xmlNode *root);
507                     };
508 
509                     class ThresholdPoints {
510                         private:
511                         const std::vector<ThresholdPoint> brightnessThresholdPoint_;
512                         public:
513                         explicit ThresholdPoints(std::vector<ThresholdPoint> brightnessThresholdPoint);
514                         const std::vector<ThresholdPoint>& getBrightnessThresholdPoint() const;
515                         bool hasBrightnessThresholdPoint() const;
516                         const ThresholdPoint* getFirstBrightnessThresholdPoint() const;
517                         static ThresholdPoints read(xmlNode *root);
518                     };
519 
520                     class ThresholdPoint {
521                         private:
522                         const std::optional<double> threshold_;
523                         const std::optional<double> percentage_;
524                         public:
525                         ThresholdPoint(std::optional<double> threshold, std::optional<double> percentage);
526                         const double& getThreshold() const;
527                         bool hasThreshold() const;
528                         const double& getPercentage() const;
529                         bool hasPercentage() const;
530                         static ThresholdPoint read(xmlNode *root);
531                     };
532 
533                     class AutoBrightness {
534                         private:
535                         const std::optional<int64_t> brighteningLightDebounceMillis_;
536                         const std::optional<int64_t> darkeningLightDebounceMillis_;
537                         const std::optional<int64_t> brighteningLightDebounceIdleMillis_;
538                         const std::optional<int64_t> darkeningLightDebounceIdleMillis_;
539                         const std::vector<LuxToBrightnessMapping> luxToBrightnessMapping_;
540                         const std::optional<int64_t> idleStylusTimeoutMillis_;
541                         const std::optional<bool> enabled_;
542                         public:
543                         AutoBrightness(std::optional<int64_t> brighteningLightDebounceMillis, std::optional<int64_t> darkeningLightDebounceMillis, std::optional<int64_t> brighteningLightDebounceIdleMillis, std::optional<int64_t> darkeningLightDebounceIdleMillis, std::vector<LuxToBrightnessMapping> luxToBrightnessMapping, std::optional<int64_t> idleStylusTimeoutMillis, std::optional<bool> enabled);
544                         const int64_t& getBrighteningLightDebounceMillis() const;
545                         bool hasBrighteningLightDebounceMillis() const;
546                         const int64_t& getDarkeningLightDebounceMillis() const;
547                         bool hasDarkeningLightDebounceMillis() const;
548                         const int64_t& getBrighteningLightDebounceIdleMillis() const;
549                         bool hasBrighteningLightDebounceIdleMillis() const;
550                         const int64_t& getDarkeningLightDebounceIdleMillis() const;
551                         bool hasDarkeningLightDebounceIdleMillis() const;
552                         const std::vector<LuxToBrightnessMapping>& getLuxToBrightnessMapping() const;
553                         bool hasLuxToBrightnessMapping() const;
554                         const LuxToBrightnessMapping* getFirstLuxToBrightnessMapping() const;
555                         const int64_t& getIdleStylusTimeoutMillis() const;
556                         bool hasIdleStylusTimeoutMillis() const;
557                         const bool& getEnabled() const;
558                         bool hasEnabled() const;
559                         static AutoBrightness read(xmlNode *root);
560                     };
561 
562                     class LuxToBrightnessMapping {
563                         private:
564                         const std::vector<NonNegativeFloatToFloatMap> map_;
565                         const std::optional<AutoBrightnessModeName> mode_;
566                         const std::optional<AutoBrightnessSettingName> setting_;
567                         public:
568                         LuxToBrightnessMapping(std::vector<NonNegativeFloatToFloatMap> map, std::optional<AutoBrightnessModeName> mode, std::optional<AutoBrightnessSettingName> setting);
569                         const std::vector<NonNegativeFloatToFloatMap>& getMap() const;
570                         bool hasMap() const;
571                         const NonNegativeFloatToFloatMap* getFirstMap() const;
572                         const AutoBrightnessModeName& getMode() const;
573                         bool hasMode() const;
574                         const AutoBrightnessSettingName& getSetting() const;
575                         bool hasSetting() const;
576                         static LuxToBrightnessMapping read(xmlNode *root);
577                     };
578 
579                     class DisplayBrightnessPoint {
580                         private:
581                         const std::optional<int64_t> lux_;
582                         const std::optional<double> nits_;
583                         public:
584                         DisplayBrightnessPoint(std::optional<int64_t> lux, std::optional<double> nits);
585                         const int64_t& getLux() const;
586                         bool hasLux() const;
587                         const double& getNits() const;
588                         bool hasNits() const;
589                         static DisplayBrightnessPoint read(xmlNode *root);
590                     };
591 
592                     class RefreshRateConfigs {
593                         private:
594                         const std::optional<int64_t> defaultRefreshRate_;
595                         const std::optional<int64_t> defaultPeakRefreshRate_;
596                         const std::vector<RefreshRateZoneProfiles> refreshRateZoneProfiles_;
597                         const std::optional<int64_t> defaultRefreshRateInHbmHdr_;
598                         const std::optional<int64_t> defaultRefreshRateInHbmSunlight_;
599                         const std::vector<BlockingZoneConfig> lowerBlockingZoneConfigs_;
600                         const std::vector<BlockingZoneConfig> higherBlockingZoneConfigs_;
601                         const std::vector<NonNegativeFloatToFloatMap> lowPowerSupportedModes_;
602                         public:
603                         RefreshRateConfigs(std::optional<int64_t> defaultRefreshRate, std::optional<int64_t> defaultPeakRefreshRate, std::vector<RefreshRateZoneProfiles> refreshRateZoneProfiles, std::optional<int64_t> defaultRefreshRateInHbmHdr, std::optional<int64_t> defaultRefreshRateInHbmSunlight, std::vector<BlockingZoneConfig> lowerBlockingZoneConfigs, std::vector<BlockingZoneConfig> higherBlockingZoneConfigs, std::vector<NonNegativeFloatToFloatMap> lowPowerSupportedModes);
604                         const int64_t& getDefaultRefreshRate() const;
605                         bool hasDefaultRefreshRate() const;
606                         const int64_t& getDefaultPeakRefreshRate() const;
607                         bool hasDefaultPeakRefreshRate() const;
608                         const std::vector<RefreshRateZoneProfiles>& getRefreshRateZoneProfiles() const;
609                         bool hasRefreshRateZoneProfiles() const;
610                         const RefreshRateZoneProfiles* getFirstRefreshRateZoneProfiles() const;
611                         const int64_t& getDefaultRefreshRateInHbmHdr() const;
612                         bool hasDefaultRefreshRateInHbmHdr() const;
613                         const int64_t& getDefaultRefreshRateInHbmSunlight() const;
614                         bool hasDefaultRefreshRateInHbmSunlight() const;
615                         const std::vector<BlockingZoneConfig>& getLowerBlockingZoneConfigs() const;
616                         bool hasLowerBlockingZoneConfigs() const;
617                         const BlockingZoneConfig* getFirstLowerBlockingZoneConfigs() const;
618                         const std::vector<BlockingZoneConfig>& getHigherBlockingZoneConfigs() const;
619                         bool hasHigherBlockingZoneConfigs() const;
620                         const BlockingZoneConfig* getFirstHigherBlockingZoneConfigs() const;
621                         const std::vector<NonNegativeFloatToFloatMap>& getLowPowerSupportedModes() const;
622                         bool hasLowPowerSupportedModes() const;
623                         const NonNegativeFloatToFloatMap* getFirstLowPowerSupportedModes() const;
624                         static RefreshRateConfigs read(xmlNode *root);
625                     };
626 
627                     class RefreshRateZoneProfiles {
628                         private:
629                         const std::vector<RefreshRateZone> refreshRateZoneProfile_;
630                         public:
631                         explicit RefreshRateZoneProfiles(std::vector<RefreshRateZone> refreshRateZoneProfile);
632                         const std::vector<RefreshRateZone>& getRefreshRateZoneProfile() const;
633                         bool hasRefreshRateZoneProfile() const;
634                         const RefreshRateZone* getFirstRefreshRateZoneProfile() const;
635                         static RefreshRateZoneProfiles read(xmlNode *root);
636                     };
637 
638                     class RefreshRateZone {
639                         private:
640                         const std::vector<RefreshRateRange> refreshRateRange_;
641                         const std::string id_;
642                         public:
643                         RefreshRateZone(std::vector<RefreshRateRange> refreshRateRange, std::string id);
644                         const std::vector<RefreshRateRange>& getRefreshRateRange() const;
645                         bool hasRefreshRateRange() const;
646                         const RefreshRateRange* getFirstRefreshRateRange() const;
647                         const std::string& getId() const;
648                         bool hasId() const;
649                         static RefreshRateZone read(xmlNode *root);
650                     };
651 
652                     class BlockingZoneConfig {
653                         private:
654                         const std::vector<NonNegativeFloatToFloatMap> supportedModes_;
655                         const std::optional<int64_t> defaultRefreshRate_;
656                         const std::optional<std::string> refreshRateThermalThrottlingId_;
657                         const std::vector<BlockingZoneThreshold> blockingZoneThreshold_;
658                         public:
659                         BlockingZoneConfig(std::vector<NonNegativeFloatToFloatMap> supportedModes, std::optional<int64_t> defaultRefreshRate, std::optional<std::string> refreshRateThermalThrottlingId, std::vector<BlockingZoneThreshold> blockingZoneThreshold);
660                         const std::vector<NonNegativeFloatToFloatMap>& getSupportedModes() const;
661                         bool hasSupportedModes() const;
662                         const NonNegativeFloatToFloatMap* getFirstSupportedModes() const;
663                         const int64_t& getDefaultRefreshRate() const;
664                         bool hasDefaultRefreshRate() const;
665                         const std::string& getRefreshRateThermalThrottlingId() const;
666                         bool hasRefreshRateThermalThrottlingId() const;
667                         const std::vector<BlockingZoneThreshold>& getBlockingZoneThreshold() const;
668                         bool hasBlockingZoneThreshold() const;
669                         const BlockingZoneThreshold* getFirstBlockingZoneThreshold() const;
670                         static BlockingZoneConfig read(xmlNode *root);
671                     };
672 
673                     class BlockingZoneThreshold {
674                         private:
675                         const std::vector<DisplayBrightnessPoint> displayBrightnessPoint_;
676                         public:
677                         explicit BlockingZoneThreshold(std::vector<DisplayBrightnessPoint> displayBrightnessPoint);
678                         const std::vector<DisplayBrightnessPoint>& getDisplayBrightnessPoint() const;
679                         bool hasDisplayBrightnessPoint() const;
680                         const DisplayBrightnessPoint* getFirstDisplayBrightnessPoint() const;
681                         static BlockingZoneThreshold read(xmlNode *root);
682                     };
683 
684                     class IntegerArray {
685                         private:
686                         const std::vector<int64_t> item_;
687                         public:
688                         explicit IntegerArray(std::vector<int64_t> item);
689                         const std::vector<int64_t>& getItem() const;
690                         bool hasItem() const;
691                         const int64_t* getFirstItem() const;
692                         static IntegerArray read(xmlNode *root);
693                     };
694 
695                     class FloatArray {
696                         private:
697                         const std::vector<double> item_;
698                         public:
699                         explicit FloatArray(std::vector<double> item);
700                         const std::vector<double>& getItem() const;
701                         bool hasItem() const;
702                         const double* getFirstItem() const;
703                         static FloatArray read(xmlNode *root);
704                     };
705 
706                     class UsiVersion {
707                         private:
708                         const std::optional<int64_t> majorVersion_;
709                         const std::optional<int64_t> minorVersion_;
710                         public:
711                         UsiVersion(std::optional<int64_t> majorVersion, std::optional<int64_t> minorVersion);
712                         const int64_t& getMajorVersion() const;
713                         bool hasMajorVersion() const;
714                         const int64_t& getMinorVersion() const;
715                         bool hasMinorVersion() const;
716                         static UsiVersion read(xmlNode *root);
717                     };
718 
719                     class NonNegativeFloatToFloatPoint {
720                         private:
721                         const std::optional<double> first_;
722                         const std::optional<double> second_;
723                         public:
724                         NonNegativeFloatToFloatPoint(std::optional<double> first, std::optional<double> second);
725                         const double& getFirst() const;
726                         bool hasFirst() const;
727                         const double& getSecond() const;
728                         bool hasSecond() const;
729                         static NonNegativeFloatToFloatPoint read(xmlNode *root);
730                     };
731 
732                     class NonNegativeFloatToFloatMap {
733                         private:
734                         const std::vector<NonNegativeFloatToFloatPoint> point_;
735                         public:
736                         explicit NonNegativeFloatToFloatMap(std::vector<NonNegativeFloatToFloatPoint> point);
737                         const std::vector<NonNegativeFloatToFloatPoint>& getPoint() const;
738                         bool hasPoint() const;
739                         const NonNegativeFloatToFloatPoint* getFirstPoint() const;
740                         static NonNegativeFloatToFloatMap read(xmlNode *root);
741                     };
742 
743                     class IdleScreenRefreshRateTimeout {
744                         private:
745                         const std::vector<IdleScreenRefreshRateTimeoutLuxThresholds> luxThresholds_;
746                         public:
747                         explicit IdleScreenRefreshRateTimeout(std::vector<IdleScreenRefreshRateTimeoutLuxThresholds> luxThresholds);
748                         const std::vector<IdleScreenRefreshRateTimeoutLuxThresholds>& getLuxThresholds() const;
749                         bool hasLuxThresholds() const;
750                         const IdleScreenRefreshRateTimeoutLuxThresholds* getFirstLuxThresholds() const;
751                         static IdleScreenRefreshRateTimeout read(xmlNode *root);
752                     };
753 
754                     class IdleScreenRefreshRateTimeoutLuxThresholds {
755                         private:
756                         const std::vector<IdleScreenRefreshRateTimeoutLuxThresholdPoint> point_;
757                         public:
758                         explicit IdleScreenRefreshRateTimeoutLuxThresholds(std::vector<IdleScreenRefreshRateTimeoutLuxThresholdPoint> point);
759                         const std::vector<IdleScreenRefreshRateTimeoutLuxThresholdPoint>& getPoint() const;
760                         bool hasPoint() const;
761                         const IdleScreenRefreshRateTimeoutLuxThresholdPoint* getFirstPoint() const;
762                         static IdleScreenRefreshRateTimeoutLuxThresholds read(xmlNode *root);
763                     };
764 
765                     class IdleScreenRefreshRateTimeoutLuxThresholdPoint {
766                         private:
767                         const std::optional<int64_t> lux_;
768                         const std::optional<int64_t> timeout_;
769                         public:
770                         IdleScreenRefreshRateTimeoutLuxThresholdPoint(std::optional<int64_t> lux, std::optional<int64_t> timeout);
771                         const int64_t& getLux() const;
772                         bool hasLux() const;
773                         const int64_t& getTimeout() const;
774                         bool hasTimeout() const;
775                         static IdleScreenRefreshRateTimeoutLuxThresholdPoint read(xmlNode *root);
776                     };
777 
778                     class DisplayConfiguration {
779                         private:
780                         const std::optional<std::string> name_;
781                         const std::vector<DensityMapping> densityMapping_;
782                         const std::vector<NitsMap> screenBrightnessMap_;
783                         const std::optional<double> screenBrightnessDefault_;
784                         const std::vector<ThermalThrottling> thermalThrottling_;
785                         const std::vector<PowerThrottlingConfig> powerThrottlingConfig_;
786                         const std::vector<LuxThrottling> luxThrottling_;
787                         const std::vector<HighBrightnessMode> highBrightnessMode_;
788                         const std::vector<HdrBrightnessConfig> hdrBrightnessConfig_;
789                         const std::vector<DisplayQuirks> quirks_;
790                         const std::vector<AutoBrightness> autoBrightness_;
791                         const std::vector<RefreshRateConfigs> refreshRate_;
792                         const std::optional<double> screenBrightnessRampFastDecrease_;
793                         const std::optional<double> screenBrightnessRampFastIncrease_;
794                         const std::optional<double> screenBrightnessRampSlowDecrease_;
795                         const std::optional<double> screenBrightnessRampSlowIncrease_;
796                         const std::optional<double> screenBrightnessRampSlowDecreaseIdle_;
797                         const std::optional<double> screenBrightnessRampSlowIncreaseIdle_;
798                         const std::optional<int64_t> screenBrightnessRampIncreaseMaxMillis_;
799                         const std::optional<int64_t> screenBrightnessRampDecreaseMaxMillis_;
800                         const std::optional<int64_t> screenBrightnessRampIncreaseMaxIdleMillis_;
801                         const std::optional<int64_t> screenBrightnessRampDecreaseMaxIdleMillis_;
802                         const std::vector<SensorDetails> lightSensor_;
803                         const std::vector<SensorDetails> screenOffBrightnessSensor_;
804                         const std::vector<SensorDetails> proxSensor_;
805                         const std::vector<SensorDetails> tempSensor_;
806                         const std::optional<int64_t> ambientLightHorizonLong_;
807                         const std::optional<int64_t> ambientLightHorizonShort_;
808                         const std::vector<Thresholds> displayBrightnessChangeThresholds_;
809                         const std::vector<Thresholds> ambientBrightnessChangeThresholds_;
810                         const std::vector<Thresholds> displayBrightnessChangeThresholdsIdle_;
811                         const std::vector<Thresholds> ambientBrightnessChangeThresholdsIdle_;
812                         const std::vector<IntegerArray> screenOffBrightnessSensorValueToLux_;
813                         const std::vector<UsiVersion> usiVersion_;
814                         const std::vector<EvenDimmerMode> evenDimmer_;
815                         const std::optional<double> screenBrightnessCapForWearBedtimeMode_;
816                         const std::vector<IdleScreenRefreshRateTimeout> idleScreenRefreshRateTimeout_;
817                         const std::optional<bool> supportsVrr_;
818                         const std::vector<FloatArray> dozeBrightnessSensorValueToBrightness_;
819                         const std::optional<double> defaultDozeBrightness_;
820                         public:
821                         DisplayConfiguration(std::optional<std::string> name, std::vector<DensityMapping> densityMapping, std::vector<NitsMap> screenBrightnessMap, std::optional<double> screenBrightnessDefault, std::vector<ThermalThrottling> thermalThrottling, std::vector<PowerThrottlingConfig> powerThrottlingConfig, std::vector<LuxThrottling> luxThrottling, std::vector<HighBrightnessMode> highBrightnessMode, std::vector<HdrBrightnessConfig> hdrBrightnessConfig, std::vector<DisplayQuirks> quirks, std::vector<AutoBrightness> autoBrightness, std::vector<RefreshRateConfigs> refreshRate, std::optional<double> screenBrightnessRampFastDecrease, std::optional<double> screenBrightnessRampFastIncrease, std::optional<double> screenBrightnessRampSlowDecrease, std::optional<double> screenBrightnessRampSlowIncrease, std::optional<double> screenBrightnessRampSlowDecreaseIdle, std::optional<double> screenBrightnessRampSlowIncreaseIdle, std::optional<int64_t> screenBrightnessRampIncreaseMaxMillis, std::optional<int64_t> screenBrightnessRampDecreaseMaxMillis, std::optional<int64_t> screenBrightnessRampIncreaseMaxIdleMillis, std::optional<int64_t> screenBrightnessRampDecreaseMaxIdleMillis, std::vector<SensorDetails> lightSensor, std::vector<SensorDetails> screenOffBrightnessSensor, std::vector<SensorDetails> proxSensor, std::vector<SensorDetails> tempSensor, std::optional<int64_t> ambientLightHorizonLong, std::optional<int64_t> ambientLightHorizonShort, std::vector<Thresholds> displayBrightnessChangeThresholds, std::vector<Thresholds> ambientBrightnessChangeThresholds, std::vector<Thresholds> displayBrightnessChangeThresholdsIdle, std::vector<Thresholds> ambientBrightnessChangeThresholdsIdle, std::vector<IntegerArray> screenOffBrightnessSensorValueToLux, std::vector<UsiVersion> usiVersion, std::vector<EvenDimmerMode> evenDimmer, std::optional<double> screenBrightnessCapForWearBedtimeMode, std::vector<IdleScreenRefreshRateTimeout> idleScreenRefreshRateTimeout, std::optional<bool> supportsVrr, std::vector<FloatArray> dozeBrightnessSensorValueToBrightness, std::optional<double> defaultDozeBrightness);
822                         const std::string& getName() const;
823                         bool hasName() const;
824                         const std::vector<DensityMapping>& getDensityMapping() const;
825                         bool hasDensityMapping() const;
826                         const DensityMapping* getFirstDensityMapping() const;
827                         const std::vector<NitsMap>& getScreenBrightnessMap() const;
828                         bool hasScreenBrightnessMap() const;
829                         const NitsMap* getFirstScreenBrightnessMap() const;
830                         const double& getScreenBrightnessDefault() const;
831                         bool hasScreenBrightnessDefault() const;
832                         const std::vector<ThermalThrottling>& getThermalThrottling() const;
833                         bool hasThermalThrottling() const;
834                         const ThermalThrottling* getFirstThermalThrottling() const;
835                         const std::vector<PowerThrottlingConfig>& getPowerThrottlingConfig() const;
836                         bool hasPowerThrottlingConfig() const;
837                         const PowerThrottlingConfig* getFirstPowerThrottlingConfig() const;
838                         const std::vector<LuxThrottling>& getLuxThrottling() const;
839                         bool hasLuxThrottling() const;
840                         const LuxThrottling* getFirstLuxThrottling() const;
841                         const std::vector<HighBrightnessMode>& getHighBrightnessMode() const;
842                         bool hasHighBrightnessMode() const;
843                         const HighBrightnessMode* getFirstHighBrightnessMode() const;
844                         const std::vector<HdrBrightnessConfig>& getHdrBrightnessConfig() const;
845                         bool hasHdrBrightnessConfig() const;
846                         const HdrBrightnessConfig* getFirstHdrBrightnessConfig() const;
847                         const std::vector<DisplayQuirks>& getQuirks() const;
848                         bool hasQuirks() const;
849                         const DisplayQuirks* getFirstQuirks() const;
850                         const std::vector<AutoBrightness>& getAutoBrightness() const;
851                         bool hasAutoBrightness() const;
852                         const AutoBrightness* getFirstAutoBrightness() const;
853                         const std::vector<RefreshRateConfigs>& getRefreshRate() const;
854                         bool hasRefreshRate() const;
855                         const RefreshRateConfigs* getFirstRefreshRate() const;
856                         const double& getScreenBrightnessRampFastDecrease() const;
857                         bool hasScreenBrightnessRampFastDecrease() const;
858                         const double& getScreenBrightnessRampFastIncrease() const;
859                         bool hasScreenBrightnessRampFastIncrease() const;
860                         const double& getScreenBrightnessRampSlowDecrease() const;
861                         bool hasScreenBrightnessRampSlowDecrease() const;
862                         const double& getScreenBrightnessRampSlowIncrease() const;
863                         bool hasScreenBrightnessRampSlowIncrease() const;
864                         const double& getScreenBrightnessRampSlowDecreaseIdle() const;
865                         bool hasScreenBrightnessRampSlowDecreaseIdle() const;
866                         const double& getScreenBrightnessRampSlowIncreaseIdle() const;
867                         bool hasScreenBrightnessRampSlowIncreaseIdle() const;
868                         const int64_t& getScreenBrightnessRampIncreaseMaxMillis() const;
869                         bool hasScreenBrightnessRampIncreaseMaxMillis() const;
870                         const int64_t& getScreenBrightnessRampDecreaseMaxMillis() const;
871                         bool hasScreenBrightnessRampDecreaseMaxMillis() const;
872                         const int64_t& getScreenBrightnessRampIncreaseMaxIdleMillis() const;
873                         bool hasScreenBrightnessRampIncreaseMaxIdleMillis() const;
874                         const int64_t& getScreenBrightnessRampDecreaseMaxIdleMillis() const;
875                         bool hasScreenBrightnessRampDecreaseMaxIdleMillis() const;
876                         const std::vector<SensorDetails>& getLightSensor() const;
877                         bool hasLightSensor() const;
878                         const SensorDetails* getFirstLightSensor() const;
879                         const std::vector<SensorDetails>& getScreenOffBrightnessSensor() const;
880                         bool hasScreenOffBrightnessSensor() const;
881                         const SensorDetails* getFirstScreenOffBrightnessSensor() const;
882                         const std::vector<SensorDetails>& getProxSensor() const;
883                         bool hasProxSensor() const;
884                         const SensorDetails* getFirstProxSensor() const;
885                         const std::vector<SensorDetails>& getTempSensor() const;
886                         bool hasTempSensor() const;
887                         const SensorDetails* getFirstTempSensor() const;
888                         const int64_t& getAmbientLightHorizonLong() const;
889                         bool hasAmbientLightHorizonLong() const;
890                         const int64_t& getAmbientLightHorizonShort() const;
891                         bool hasAmbientLightHorizonShort() const;
892                         const std::vector<Thresholds>& getDisplayBrightnessChangeThresholds() const;
893                         bool hasDisplayBrightnessChangeThresholds() const;
894                         const Thresholds* getFirstDisplayBrightnessChangeThresholds() const;
895                         const std::vector<Thresholds>& getAmbientBrightnessChangeThresholds() const;
896                         bool hasAmbientBrightnessChangeThresholds() const;
897                         const Thresholds* getFirstAmbientBrightnessChangeThresholds() const;
898                         const std::vector<Thresholds>& getDisplayBrightnessChangeThresholdsIdle() const;
899                         bool hasDisplayBrightnessChangeThresholdsIdle() const;
900                         const Thresholds* getFirstDisplayBrightnessChangeThresholdsIdle() const;
901                         const std::vector<Thresholds>& getAmbientBrightnessChangeThresholdsIdle() const;
902                         bool hasAmbientBrightnessChangeThresholdsIdle() const;
903                         const Thresholds* getFirstAmbientBrightnessChangeThresholdsIdle() const;
904                         const std::vector<IntegerArray>& getScreenOffBrightnessSensorValueToLux() const;
905                         bool hasScreenOffBrightnessSensorValueToLux() const;
906                         const IntegerArray* getFirstScreenOffBrightnessSensorValueToLux() const;
907                         const std::vector<UsiVersion>& getUsiVersion() const;
908                         bool hasUsiVersion() const;
909                         const UsiVersion* getFirstUsiVersion() const;
910                         const std::vector<EvenDimmerMode>& getEvenDimmer() const;
911                         bool hasEvenDimmer() const;
912                         const EvenDimmerMode* getFirstEvenDimmer() const;
913                         const double& getScreenBrightnessCapForWearBedtimeMode() const;
914                         bool hasScreenBrightnessCapForWearBedtimeMode() const;
915                         const std::vector<IdleScreenRefreshRateTimeout>& getIdleScreenRefreshRateTimeout() const;
916                         bool hasIdleScreenRefreshRateTimeout() const;
917                         const IdleScreenRefreshRateTimeout* getFirstIdleScreenRefreshRateTimeout() const;
918                         const bool& getSupportsVrr() const;
919                         bool hasSupportsVrr() const;
920                         const std::vector<FloatArray>& getDozeBrightnessSensorValueToBrightness() const;
921                         bool hasDozeBrightnessSensorValueToBrightness() const;
922                         const FloatArray* getFirstDozeBrightnessSensorValueToBrightness() const;
923                         const double& getDefaultDozeBrightness() const;
924                         bool hasDefaultDozeBrightness() const;
925                         static DisplayConfiguration read(xmlNode *root);
926                     };
927 
928                 } // config
929             } // display
930         } // server
931     } // android
932 } // com
933 #endif // COM_ANDROID_SERVER_DISPLAY_CONFIG_H
934