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