19630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown/*
29630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Copyright (C) 2012 The Android Open Source Project
39630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown *
49630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
59630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * you may not use this file except in compliance with the License.
69630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * You may obtain a copy of the License at
79630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown *
89630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
99630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown *
109630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Unless required by applicable law or agreed to in writing, software
119630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
129630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * See the License for the specific language governing permissions and
149630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * limitations under the License.
159630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown */
169630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
179630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brownpackage com.android.server.power;
189630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
199630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brownimport android.os.PowerManager;
209630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
219630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown/**
229630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * Describes the requested power state of the display.
239630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown *
249630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * This object is intended to describe the general characteristics of the
259630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * power state, such as whether the screen should be on or off and the current
269630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * brightness controls leaving the {@link DisplayPowerController} to manage the
279630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * details of how the transitions between states should occur.  The goal is for
289630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * the {@link PowerManagerService} to focus on the global power state and not
299630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown * have to micro-manage screen off animations, auto-brightness and other effects.
309630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown */
319630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brownfinal class DisplayPowerRequest {
329630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public static final int SCREEN_STATE_OFF = 0;
339630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public static final int SCREEN_STATE_DIM = 1;
349630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public static final int SCREEN_STATE_BRIGHT = 2;
359630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
369630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // The requested minimum screen power state: off, dim or bright.
379630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public int screenState;
389630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
399630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // If true, the proximity sensor overrides the screen state when an object is
409630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // nearby, turning it off temporarily until the object is moved away.
419630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public boolean useProximitySensor;
429630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
439630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // The desired screen brightness in the range 0 (minimum / off) to 255 (brightest).
449630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // The display power controller may choose to clamp the brightness.
459630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // When auto-brightness is enabled, this field should specify a nominal default
469630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // value to use while waiting for the light sensor to report enough data.
479630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public int screenBrightness;
489630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
49330560f53bccd06be805fee1b7988162119d1295Jeff Brown    // The screen auto-brightness adjustment factor in the range -1 (dimmer) to 1 (brighter).
50330560f53bccd06be805fee1b7988162119d1295Jeff Brown    public float screenAutoBrightnessAdjustment;
51330560f53bccd06be805fee1b7988162119d1295Jeff Brown
529630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    // If true, enables automatic brightness control.
539630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public boolean useAutoBrightness;
549630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
558b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // If true, prevents the screen from completely turning on if it is currently off.
568b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // The display does not enter a "ready" state if this flag is true and screen on is
578b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // blocked.  The window manager policy blocks screen on while it prepares the keyguard to
588b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // prevent the user from seeing intermediate updates.
598b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    //
608b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // Technically, we may not block the screen itself from turning on (because that introduces
618b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // extra unnecessary latency) but we do prevent content on screen from becoming
628b9cf1c8000eb581457713a5c0ce41c59f90c353Jeff Brown    // visible to the user.
63c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown    public boolean blockScreenOn;
64c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown
659630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public DisplayPowerRequest() {
669630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        screenState = SCREEN_STATE_BRIGHT;
679630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        useProximitySensor = false;
689630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        screenBrightness = PowerManager.BRIGHTNESS_ON;
69330560f53bccd06be805fee1b7988162119d1295Jeff Brown        screenAutoBrightnessAdjustment = 0.0f;
709630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        useAutoBrightness = false;
71c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown        blockScreenOn = false;
729630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
739630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
749630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public DisplayPowerRequest(DisplayPowerRequest other) {
759630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        copyFrom(other);
769630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
779630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
789630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public void copyFrom(DisplayPowerRequest other) {
799630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        screenState = other.screenState;
809630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        useProximitySensor = other.useProximitySensor;
819630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        screenBrightness = other.screenBrightness;
82330560f53bccd06be805fee1b7988162119d1295Jeff Brown        screenAutoBrightnessAdjustment = other.screenAutoBrightnessAdjustment;
839630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        useAutoBrightness = other.useAutoBrightness;
84c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown        blockScreenOn = other.blockScreenOn;
859630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
869630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
879630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    @Override
889630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public boolean equals(Object o) {
899630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        return o instanceof DisplayPowerRequest
909630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                && equals((DisplayPowerRequest)o);
919630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
929630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
939630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public boolean equals(DisplayPowerRequest other) {
949630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        return other != null
959630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                && screenState == other.screenState
969630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                && useProximitySensor == other.useProximitySensor
979630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                && screenBrightness == other.screenBrightness
98330560f53bccd06be805fee1b7988162119d1295Jeff Brown                && screenAutoBrightnessAdjustment == other.screenAutoBrightnessAdjustment
99c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown                && useAutoBrightness == other.useAutoBrightness
100c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown                && blockScreenOn == other.blockScreenOn;
1019630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
1029630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
1039630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    @Override
1049630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public int hashCode() {
1059630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        return 0; // don't care
1069630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
1079630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown
1089630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    @Override
1099630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    public String toString() {
1109630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown        return "screenState=" + screenState
1119630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                + ", useProximitySensor=" + useProximitySensor
1129630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                + ", screenBrightness=" + screenBrightness
113330560f53bccd06be805fee1b7988162119d1295Jeff Brown                + ", screenAutoBrightnessAdjustment=" + screenAutoBrightnessAdjustment
114c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown                + ", useAutoBrightness=" + useAutoBrightness
115c38c9be031ddad5cf551b55458889f11e01dc5b2Jeff Brown                + ", blockScreenOn=" + blockScreenOn;
1169630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown    }
1179630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown}
118