1/*
2 * Copyright 2017 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
17package android.hardware.display;
18
19import android.annotation.SystemApi;
20import android.annotation.TestApi;
21import android.os.Parcel;
22import android.os.Parcelable;
23
24/**
25 * Data about a brightness settings change.
26 *
27 * {@see DisplayManager.getBrightnessEvents()}
28 * @hide
29 */
30@SystemApi
31@TestApi
32public final class BrightnessChangeEvent implements Parcelable {
33    /** Brightness in nits */
34    public final float brightness;
35
36    /** Timestamp of the change {@see System.currentTimeMillis()} */
37    public final long timeStamp;
38
39    /** Package name of focused activity when brightness was changed.
40     *  This will be null if the caller of {@see DisplayManager.getBrightnessEvents()}
41     *  does not have access to usage stats {@see UsageStatsManager} */
42    public final String packageName;
43
44    /** User id of of the user running when brightness was changed.
45     * @hide */
46    public final int userId;
47
48    /** Lux values of recent sensor data */
49    public final float[] luxValues;
50
51    /** Timestamps of the lux sensor readings {@see System.currentTimeMillis()} */
52    public final long[] luxTimestamps;
53
54    /** Most recent battery level when brightness was changed or Float.NaN */
55    public final float batteryLevel;
56
57    /** Factor applied to brightness due to battery level, 0.0-1.0 */
58    public final float powerBrightnessFactor;
59
60    /** Color filter active to provide night mode */
61    public final boolean nightMode;
62
63    /** If night mode color filter is active this will be the temperature in kelvin */
64    public final int colorTemperature;
65
66    /** Brightness level before slider adjustment */
67    public final float lastBrightness;
68
69    /** Whether brightness configuration is default version */
70    public final boolean isDefaultBrightnessConfig;
71
72    /** Whether brightness curve includes a user brightness point */
73    public final boolean isUserSetBrightness;
74
75
76    /** @hide */
77    private BrightnessChangeEvent(float brightness, long timeStamp, String packageName,
78            int userId, float[] luxValues, long[] luxTimestamps, float batteryLevel,
79            float powerBrightnessFactor, boolean nightMode, int colorTemperature,
80            float lastBrightness, boolean isDefaultBrightnessConfig, boolean isUserSetBrightness) {
81        this.brightness = brightness;
82        this.timeStamp = timeStamp;
83        this.packageName = packageName;
84        this.userId = userId;
85        this.luxValues = luxValues;
86        this.luxTimestamps = luxTimestamps;
87        this.batteryLevel = batteryLevel;
88        this.powerBrightnessFactor = powerBrightnessFactor;
89        this.nightMode = nightMode;
90        this.colorTemperature = colorTemperature;
91        this.lastBrightness = lastBrightness;
92        this.isDefaultBrightnessConfig = isDefaultBrightnessConfig;
93        this.isUserSetBrightness = isUserSetBrightness;
94    }
95
96    /** @hide */
97    public BrightnessChangeEvent(BrightnessChangeEvent other, boolean redactPackage) {
98        this.brightness = other.brightness;
99        this.timeStamp = other.timeStamp;
100        this.packageName = redactPackage ? null : other.packageName;
101        this.userId = other.userId;
102        this.luxValues = other.luxValues;
103        this.luxTimestamps = other.luxTimestamps;
104        this.batteryLevel = other.batteryLevel;
105        this.powerBrightnessFactor = other.powerBrightnessFactor;
106        this.nightMode = other.nightMode;
107        this.colorTemperature = other.colorTemperature;
108        this.lastBrightness = other.lastBrightness;
109        this.isDefaultBrightnessConfig = other.isDefaultBrightnessConfig;
110        this.isUserSetBrightness = other.isUserSetBrightness;
111    }
112
113    private BrightnessChangeEvent(Parcel source) {
114        brightness = source.readFloat();
115        timeStamp = source.readLong();
116        packageName = source.readString();
117        userId = source.readInt();
118        luxValues = source.createFloatArray();
119        luxTimestamps = source.createLongArray();
120        batteryLevel = source.readFloat();
121        powerBrightnessFactor = source.readFloat();
122        nightMode = source.readBoolean();
123        colorTemperature = source.readInt();
124        lastBrightness = source.readFloat();
125        isDefaultBrightnessConfig = source.readBoolean();
126        isUserSetBrightness = source.readBoolean();
127    }
128
129    public static final Creator<BrightnessChangeEvent> CREATOR =
130            new Creator<BrightnessChangeEvent>() {
131                public BrightnessChangeEvent createFromParcel(Parcel source) {
132                    return new BrightnessChangeEvent(source);
133                }
134                public BrightnessChangeEvent[] newArray(int size) {
135                    return new BrightnessChangeEvent[size];
136                }
137            };
138
139    @Override
140    public int describeContents() {
141        return 0;
142    }
143
144    @Override
145    public void writeToParcel(Parcel dest, int flags) {
146        dest.writeFloat(brightness);
147        dest.writeLong(timeStamp);
148        dest.writeString(packageName);
149        dest.writeInt(userId);
150        dest.writeFloatArray(luxValues);
151        dest.writeLongArray(luxTimestamps);
152        dest.writeFloat(batteryLevel);
153        dest.writeFloat(powerBrightnessFactor);
154        dest.writeBoolean(nightMode);
155        dest.writeInt(colorTemperature);
156        dest.writeFloat(lastBrightness);
157        dest.writeBoolean(isDefaultBrightnessConfig);
158        dest.writeBoolean(isUserSetBrightness);
159    }
160
161    /** @hide */
162    public static class Builder {
163        private float mBrightness;
164        private long mTimeStamp;
165        private String mPackageName;
166        private int mUserId;
167        private float[] mLuxValues;
168        private long[] mLuxTimestamps;
169        private float mBatteryLevel;
170        private float mPowerBrightnessFactor;
171        private boolean mNightMode;
172        private int mColorTemperature;
173        private float mLastBrightness;
174        private boolean mIsDefaultBrightnessConfig;
175        private boolean mIsUserSetBrightness;
176
177        /** {@see BrightnessChangeEvent#brightness} */
178        public Builder setBrightness(float brightness) {
179            mBrightness = brightness;
180            return this;
181        }
182
183        /** {@see BrightnessChangeEvent#timeStamp} */
184        public Builder setTimeStamp(long timeStamp) {
185            mTimeStamp = timeStamp;
186            return this;
187        }
188
189        /** {@see BrightnessChangeEvent#packageName} */
190        public Builder setPackageName(String packageName) {
191            mPackageName = packageName;
192            return this;
193        }
194
195        /** {@see BrightnessChangeEvent#userId} */
196        public Builder setUserId(int userId) {
197            mUserId = userId;
198            return this;
199        }
200
201        /** {@see BrightnessChangeEvent#luxValues} */
202        public Builder setLuxValues(float[] luxValues) {
203            mLuxValues = luxValues;
204            return this;
205        }
206
207        /** {@see BrightnessChangeEvent#luxTimestamps} */
208        public Builder setLuxTimestamps(long[] luxTimestamps) {
209            mLuxTimestamps = luxTimestamps;
210            return this;
211        }
212
213        /** {@see BrightnessChangeEvent#batteryLevel} */
214        public Builder setBatteryLevel(float batteryLevel) {
215            mBatteryLevel = batteryLevel;
216            return this;
217        }
218
219        /** {@see BrightnessChangeEvent#powerSaveBrightness} */
220        public Builder setPowerBrightnessFactor(float powerBrightnessFactor) {
221            mPowerBrightnessFactor = powerBrightnessFactor;
222            return this;
223        }
224
225        /** {@see BrightnessChangeEvent#nightMode} */
226        public Builder setNightMode(boolean nightMode) {
227            mNightMode = nightMode;
228            return this;
229        }
230
231        /** {@see BrightnessChangeEvent#colorTemperature} */
232        public Builder setColorTemperature(int colorTemperature) {
233            mColorTemperature = colorTemperature;
234            return this;
235        }
236
237        /** {@see BrightnessChangeEvent#lastBrightness} */
238        public Builder setLastBrightness(float lastBrightness) {
239            mLastBrightness = lastBrightness;
240            return this;
241        }
242
243        /** {@see BrightnessChangeEvent#isDefaultBrightnessConfig} */
244        public Builder setIsDefaultBrightnessConfig(boolean isDefaultBrightnessConfig) {
245            mIsDefaultBrightnessConfig = isDefaultBrightnessConfig;
246            return this;
247        }
248
249        /** {@see BrightnessChangeEvent#userBrightnessPoint} */
250        public Builder setUserBrightnessPoint(boolean isUserSetBrightness) {
251            mIsUserSetBrightness = isUserSetBrightness;
252            return this;
253        }
254
255        /** Builds a BrightnessChangeEvent */
256        public BrightnessChangeEvent build() {
257            return new BrightnessChangeEvent(mBrightness, mTimeStamp,
258                    mPackageName, mUserId, mLuxValues, mLuxTimestamps, mBatteryLevel,
259                    mPowerBrightnessFactor, mNightMode, mColorTemperature, mLastBrightness,
260                    mIsDefaultBrightnessConfig, mIsUserSetBrightness);
261        }
262    }
263}
264