16f357d3284a833cc50a990e14b39f389b8972254Jeff Brown/*
26f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * Copyright (C) 2014 The Android Open Source Project
36f357d3284a833cc50a990e14b39f389b8972254Jeff Brown *
46f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
56f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * you may not use this file except in compliance with the License.
66f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * You may obtain a copy of the License at
76f357d3284a833cc50a990e14b39f389b8972254Jeff Brown *
86f357d3284a833cc50a990e14b39f389b8972254Jeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
96f357d3284a833cc50a990e14b39f389b8972254Jeff Brown *
106f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * Unless required by applicable law or agreed to in writing, software
116f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
126f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * See the License for the specific language governing permissions and
146f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * limitations under the License.
156f357d3284a833cc50a990e14b39f389b8972254Jeff Brown */
166f357d3284a833cc50a990e14b39f389b8972254Jeff Brown
176f357d3284a833cc50a990e14b39f389b8972254Jeff Brownpackage android.os;
186f357d3284a833cc50a990e14b39f389b8972254Jeff Brown
19970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brownimport android.view.Display;
20970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown
216f357d3284a833cc50a990e14b39f389b8972254Jeff Brown/**
226f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * Power manager local system service interface.
236f357d3284a833cc50a990e14b39f389b8972254Jeff Brown *
246f357d3284a833cc50a990e14b39f389b8972254Jeff Brown * @hide Only for use within the system server.
256f357d3284a833cc50a990e14b39f389b8972254Jeff Brown */
264ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brownpublic abstract class PowerManagerInternal {
276f357d3284a833cc50a990e14b39f389b8972254Jeff Brown    /**
28fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * Wakefulness: The device is asleep.  It can only be awoken by a call to wakeUp().
29fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * The screen should be off or in the process of being turned off by the display controller.
30fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * The device typically passes through the dozing state first.
31fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     */
32fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static final int WAKEFULNESS_ASLEEP = 0;
33fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
34fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    /**
35fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * Wakefulness: The device is fully awake.  It can be put to sleep by a call to goToSleep().
36fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * When the user activity timeout expires, the device may start dreaming or go to sleep.
37fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     */
38fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static final int WAKEFULNESS_AWAKE = 1;
39fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
40fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    /**
41fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * Wakefulness: The device is dreaming.  It can be awoken by a call to wakeUp(),
42fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * which ends the dream.  The device goes to sleep when goToSleep() is called, when
43fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * the dream ends or when unplugged.
44fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * User activity may brighten the screen but does not end the dream.
45fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     */
46fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static final int WAKEFULNESS_DREAMING = 2;
47fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
48fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    /**
49fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * Wakefulness: The device is dozing.  It is almost asleep but is allowing a special
50fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * low-power "doze" dream to run which keeps the display on but lets the application
51fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * processor be suspended.  It can be awoken by a call to wakeUp() which ends the dream.
52fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * The device fully goes to sleep if the dream cannot be started or ends on its own.
53fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     */
54fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static final int WAKEFULNESS_DOZING = 3;
55fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
56a4d22d718affbc7145d1012157feb819557b5c06Michael Wright
57a4d22d718affbc7145d1012157feb819557b5c06Michael Wright    /**
5843e38de2530fecbbdea81c52d0fde90333432356Ruchi Kandoi     * Power hint:
5943e38de2530fecbbdea81c52d0fde90333432356Ruchi Kandoi     * Interaction: The user is interacting with the device. The corresponding data field must be
6098f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     * the expected duration of the interaction, or 0 if unknown.
61a4d22d718affbc7145d1012157feb819557b5c06Michael Wright     *
6298f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     * Sustained Performance Mode: The corresponding data field must be Enable/Disable
6398f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     * Sustained Performance Mode.
6498f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     *
6598f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     * Launch: This is specific for activity launching. The corresponding data field must be
6698f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang     * the expected duration of the required boost, or 0 if unknown.
6743e38de2530fecbbdea81c52d0fde90333432356Ruchi Kandoi     *
6843e38de2530fecbbdea81c52d0fde90333432356Ruchi Kandoi     * These must be kept in sync with the values in hardware/libhardware/include/hardware/power.h
69a4d22d718affbc7145d1012157feb819557b5c06Michael Wright     */
70a4d22d718affbc7145d1012157feb819557b5c06Michael Wright    public static final int POWER_HINT_INTERACTION = 2;
7143e38de2530fecbbdea81c52d0fde90333432356Ruchi Kandoi    public static final int POWER_HINT_SUSTAINED_PERFORMANCE_MODE = 6;
7298f03f98acb4bf8020be21be0f261f3d285b7d2eWei Wang    public static final int POWER_HINT_LAUNCH = 8;
73a4d22d718affbc7145d1012157feb819557b5c06Michael Wright
74fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static String wakefulnessToString(int wakefulness) {
75fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown        switch (wakefulness) {
76fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown            case WAKEFULNESS_ASLEEP:
77fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown                return "Asleep";
78fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown            case WAKEFULNESS_AWAKE:
79fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown                return "Awake";
80fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown            case WAKEFULNESS_DREAMING:
81fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown                return "Dreaming";
82fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown            case WAKEFULNESS_DOZING:
83fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown                return "Dozing";
84fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown            default:
85fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown                return Integer.toString(wakefulness);
86fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown        }
87fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    }
88fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
89fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    /**
90fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * Returns true if the wakefulness state represents an interactive state
91fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     * as defined by {@link android.os.PowerManager#isInteractive}.
92fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown     */
93fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    public static boolean isInteractive(int wakefulness) {
94fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown        return wakefulness == WAKEFULNESS_AWAKE || wakefulness == WAKEFULNESS_DREAMING;
95fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    }
96fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown
97fbe96706bb9754f9ea3f6345f32e058a45ad10b4Jeff Brown    /**
986f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * Used by the window manager to override the screen brightness based on the
996f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * current foreground activity.
1006f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1016f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * This method must only be called by the window manager.
1026f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1036f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * @param brightness The overridden brightness, or -1 to disable the override.
1046f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     */
1054ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown    public abstract void setScreenBrightnessOverrideFromWindowManager(int brightness);
1066f357d3284a833cc50a990e14b39f389b8972254Jeff Brown
1076f357d3284a833cc50a990e14b39f389b8972254Jeff Brown    /**
1086f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * Used by the window manager to override the button brightness based on the
1096f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * current foreground activity.
1106f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1116f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * This method must only be called by the window manager.
1126f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1136f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * @param brightness The overridden brightness, or -1 to disable the override.
1146f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     */
1154ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown    public abstract void setButtonBrightnessOverrideFromWindowManager(int brightness);
1166f357d3284a833cc50a990e14b39f389b8972254Jeff Brown
1176f357d3284a833cc50a990e14b39f389b8972254Jeff Brown    /**
1186f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * Used by the window manager to override the user activity timeout based on the
1196f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * current foreground activity.  It can only be used to make the timeout shorter
1206f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * than usual, not longer.
1216f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1226f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * This method must only be called by the window manager.
1236f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     *
1246f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     * @param timeoutMillis The overridden timeout, or -1 to disable the override.
1256f357d3284a833cc50a990e14b39f389b8972254Jeff Brown     */
1264ccb823a9f62e57f9d221f83a97e82967e79a9e5Jeff Brown    public abstract void setUserActivityTimeoutOverrideFromWindowManager(long timeoutMillis);
1276f357d3284a833cc50a990e14b39f389b8972254Jeff Brown
128970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown    /**
12956ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews     * Used by the window manager to tell the power manager that the user is no longer actively
13056ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews     * using the device.
13156ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews     */
13256ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews    public abstract void setUserInactiveOverrideFromWindowManager();
13356ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews
13456ecfcce6c88fc80cf509effcebb124bbe0c79f8Nick Armstrong-Crews    /**
1355ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown     * Used by device administration to set the maximum screen off timeout.
1365ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown     *
1375ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown     * This method must only be called by the device administration policy manager.
1385ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown     */
1395ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown    public abstract void setMaximumScreenOffTimeoutFromDeviceAdmin(int timeMs);
1405ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown
1415ce1cb240b13db98fbdc21e1ef069b5f9cec8d72Jeff Brown    /**
142970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     * Used by the dream manager to override certain properties while dozing.
143970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     *
14488e98dfa59e68a860d8c3b462ec03bc0b06d6b5cDianne Hackborn     * @param screenState The overridden screen state, or {@link Display#STATE_UNKNOWN}
145970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     * to disable the override.
146970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     * @param screenBrightness The overridden screen brightness, or
147970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     * {@link PowerManager#BRIGHTNESS_DEFAULT} to disable the override.
148970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown     */
149970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown    public abstract void setDozeOverrideFromDreamManager(
150970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown            int screenState, int screenBrightness);
151970d4132ea28e748c1010be39450a98bbf7466f3Jeff Brown
152cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn    public abstract boolean getLowPowerModeEnabled();
153cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn
1542c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown    public abstract void registerLowPowerModeObserver(LowPowerModeListener listener);
1552c43c339de5aaf4fef58aa9b5ac3af48609263a8Jeff Brown
156cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn    public interface LowPowerModeListener {
157cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn        public void onLowPowerModeChanged(boolean enabled);
158cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn    }
15988e98dfa59e68a860d8c3b462ec03bc0b06d6b5cDianne Hackborn
16008c47a5dece977a55d250d98bda9e2a8df8b6ed0Dianne Hackborn    public abstract boolean setDeviceIdleMode(boolean enabled);
16108c47a5dece977a55d250d98bda9e2a8df8b6ed0Dianne Hackborn
16208c47a5dece977a55d250d98bda9e2a8df8b6ed0Dianne Hackborn    public abstract boolean setLightDeviceIdleMode(boolean enabled);
1638d66b3fbf5d8036e25d64a8472bcd2b6b7892a1aDianne Hackborn
1648d66b3fbf5d8036e25d64a8472bcd2b6b7892a1aDianne Hackborn    public abstract void setDeviceIdleWhitelist(int[] appids);
165d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn
166af575b9f8e1b59be9c8862b6a65c0dcb88145a23Amith Yamasani    public abstract void setDeviceIdleTempWhitelist(int[] appids);
167af575b9f8e1b59be9c8862b6a65c0dcb88145a23Amith Yamasani
168d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn    public abstract void updateUidProcState(int uid, int procState);
169d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn
170d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn    public abstract void uidGone(int uid);
171a4d22d718affbc7145d1012157feb819557b5c06Michael Wright
172a4d22d718affbc7145d1012157feb819557b5c06Michael Wright    public abstract void powerHint(int hintId, int data);
1736f357d3284a833cc50a990e14b39f389b8972254Jeff Brown}
174