Home | History | Annotate | Download | only in display
      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 
     17 package android.hardware.display;
     18 
     19 import android.annotation.SystemApi;
     20 import android.annotation.TestApi;
     21 import android.os.Parcel;
     22 import android.os.Parcelable;
     23 
     24 /**
     25  * Data about a brightness settings change.
     26  *
     27  * {@see DisplayManager.getBrightnessEvents()}
     28  * @hide
     29  */
     30 @SystemApi
     31 @TestApi
     32 public 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