PowerManager.java revision 60d8762413e8daba5f73559786312a9ec5e3b827
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.os.RuntimeInit; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class gives you control of the power state of the device. 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><b>Device battery life will be significantly affected by the use of this API.</b> Do not 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * acquire WakeLocks unless you really need them, use the minimum levels possible, and be sure 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to release it as soon as you can. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can obtain an instance of this class by calling 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.Context#getSystemService(java.lang.String) Context.getSystemService()}. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The primary API you'll use is {@link #newWakeLock(int, String) newWakeLock()}. This will 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * create a {@link PowerManager.WakeLock} object. You can then use methods on this object to 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * control the power state of the device. In practice it's quite simple: 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@samplecode 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wl.acquire(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ..screen will stay on during this section.. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wl.release(); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The following flags are defined, with varying effects on system power. <i>These flags are 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mutually exclusive - you may only specify one of them.</i> 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <thead> 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>Flag Value</th> 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th>CPU</th> <th>Screen</th> <th>Keyboard</th></tr> 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </thead> 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tbody> 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #PARTIAL_WAKE_LOCK}</th> 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>On*</td> <td>Off</td> <td>Off</td> 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #SCREEN_DIM_WAKE_LOCK}</th> 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>On</td> <td>Dim</td> <td>Off</td> 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #SCREEN_BRIGHT_WAKE_LOCK}</th> 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>On</td> <td>Bright</td> <td>Off</td> 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #FULL_WAKE_LOCK}</th> 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>On</td> <td>Bright</td> <td>Bright</td> 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tbody> 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>*<i>If you hold a partial wakelock, the CPU will continue to run, irrespective of any timers 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and even after the user presses the power button. In all other wakelocks, the CPU will run, but 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user can still put the device to sleep using the power button.</i> 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In addition, you can add two more flags, which affect behavior of the screen only. <i>These 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flags have no effect when combined with a {@link #PARTIAL_WAKE_LOCK}.</i> 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <thead> 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>Flag Value</th> <th>Description</th></tr> 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </thead> 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tbody> 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #ACQUIRE_CAUSES_WAKEUP}</th> 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Normal wake locks don't actually turn on the illumination. Instead, they cause 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the illumination to remain on once it turns on (e.g. from user activity). This flag 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will force the screen and/or keyboard to turn on immediately, when the WakeLock is 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * acquired. A typical use would be for notifications which are important for the user to 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * see immediately.</td> 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th>{@link #ON_AFTER_RELEASE}</th> 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>If this flag is set, the user activity timer will be reset when the WakeLock is 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * released, causing the illumination to remain on a bit longer. This can be used to 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reduce flicker if you are cycling between wake lock conditions.</td> 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tbody> 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PowerManager 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "PowerManager"; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * These internal values define the underlying power elements that we might 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * want to control individually. Eventually we'd like to expose them. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int WAKE_BIT_CPU_STRONG = 1; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int WAKE_BIT_CPU_WEAK = 2; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int WAKE_BIT_SCREEN_DIM = 4; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int WAKE_BIT_SCREEN_BRIGHT = 8; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int WAKE_BIT_KEYBOARD_BRIGHT = 16; 117bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood private static final int WAKE_BIT_PROXIMITY_SCREEN_OFF = 32; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int LOCK_MASK = WAKE_BIT_CPU_STRONG 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | WAKE_BIT_CPU_WEAK 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | WAKE_BIT_SCREEN_DIM 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | WAKE_BIT_SCREEN_BRIGHT 123bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood | WAKE_BIT_KEYBOARD_BRIGHT 124bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood | WAKE_BIT_PROXIMITY_SCREEN_OFF; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wake lock that ensures that the CPU is running. The screen might 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not be on. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PARTIAL_WAKE_LOCK = WAKE_BIT_CPU_STRONG; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wake lock that ensures that the screen and keyboard are on at 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * full brightness. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FULL_WAKE_LOCK = WAKE_BIT_CPU_WEAK | WAKE_BIT_SCREEN_BRIGHT 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project | WAKE_BIT_KEYBOARD_BRIGHT; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wake lock that ensures that the screen is on at full brightness; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the keyboard backlight will be allowed to go off. 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SCREEN_BRIGHT_WAKE_LOCK = WAKE_BIT_CPU_WEAK | WAKE_BIT_SCREEN_BRIGHT; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wake lock that ensures that the screen is on (but may be dimmed); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the keyboard backlight will be allowed to go off. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SCREEN_DIM_WAKE_LOCK = WAKE_BIT_CPU_WEAK | WAKE_BIT_SCREEN_DIM; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 152bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * Wake lock that turns the screen off when the proximity sensor activates. 153bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * Since not all devices have proximity sensors, use 154bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@link #getSupportedWakeLockFlags() getSupportedWakeLockFlags()} to determine if 155bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * this wake lock mode is supported. 156bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 157bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@hide} 158bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood */ 159bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = WAKE_BIT_PROXIMITY_SCREEN_OFF; 160bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood 161bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood /** 1620e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * Flag for {@link WakeLock#release release(int)} to defer releasing a 1630e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * {@link #WAKE_BIT_PROXIMITY_SCREEN_OFF} wakelock until the proximity sensor returns 1640e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * a negative value. 1650e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * 1660e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * {@hide} 1670e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood */ 1680e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood public static final int WAIT_FOR_PROXIMITY_NEGATIVE = 1; 1690e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood 1700e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Normally wake locks don't actually wake the device, they just cause 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it to remain on once it's already on. Think of the video player 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * app as the normal behavior. Notifications that pop up and want 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device to be on are the exception; use this flag to be like them. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not work with PARTIAL_WAKE_LOCKs. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACQUIRE_CAUSES_WAKEUP = 0x10000000; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this wake lock is released, poke the user activity timer 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so the screen stays on for a little longer. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Will not turn the screen on if it is not already on. See {@link #ACQUIRE_CAUSES_WAKEUP} 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you want that. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not work with PARTIAL_WAKE_LOCKs. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ON_AFTER_RELEASE = 0x20000000; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Class lets you say that you need to have the device on. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Call release when you are done and don't need the lock anymore. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public class WakeLock 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int RELEASE_WAKE_LOCK = 1; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Runnable mReleaser = new Runnable() { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project release(); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mFlags; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String mTag; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBinder mToken; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCount = 0; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mRefCounted = true; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mHeld = false; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WakeLock(int flags, String tag) 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (flags & LOCK_MASK) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PARTIAL_WAKE_LOCK: 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SCREEN_DIM_WAKE_LOCK: 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SCREEN_BRIGHT_WAKE_LOCK: 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FULL_WAKE_LOCK: 220bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood case PROXIMITY_SCREEN_OFF_WAKE_LOCK: 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTag = tag; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken = new Binder(); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this WakeLock is ref counted. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value true for ref counted, false for not ref counted. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setReferenceCounted(boolean value) 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRefCounted = value; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes sure the device is on at the level you asked when you created 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the wake lock. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void acquire() 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mRefCounted || mCount++ == 0) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.acquireWakeLock(mFlags, mToken, mTag); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeld = true; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes sure the device is on at the level you asked when you created 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the wake lock. The lock will be released after the given timeout. 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timeout Release the lock after the give timeout in milliseconds. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void acquire(long timeout) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project acquire(); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.postDelayed(mReleaser, timeout); 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Release your claim to the CPU or screen being on. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It may turn off shortly after you release it, or it may not if there 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are other wake locks held. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void release() 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2790e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood release(0); 2800e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood } 2810e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood 2820e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood /** 2830e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * Release your claim to the CPU or screen being on. 2840e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * @param flags Combination of flag values to modify the release behavior. 2850e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * Currently only {@link #WAIT_FOR_PROXIMITY_NEGATIVE} is supported. 2860e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * 2870e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * <p> 2880e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * It may turn off shortly after you release it, or it may not if there 2890e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * are other wake locks held. 2900e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * 2910e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood * {@hide} 2920e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood */ 2930e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood public void release(int flags) 2940e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mRefCounted || --mCount == 0) { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2980e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood mService.releaseWakeLock(mToken, flags); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeld = false; 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCount < 0) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("WakeLock under-locked " + mTag); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isHeld() 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeld; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "WakeLock{" 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " held=" + mHeld + ", refCount=" + mCount + "}"; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mHeld) { 32960d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor Log.wtf(TAG, "WakeLock finalized while still held: " + mTag); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3310e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood mService.releaseWakeLock(mToken, 0); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get a wake lock at the level of the flags parameter. Call 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link WakeLock#acquire() acquire()} on the object to acquire the 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wake lock, and {@link WakeLock#release release()} when you are done. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@samplecode 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *PowerManager pm = (PowerManager)mContext.getSystemService( 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Context.POWER_SERVICE); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *PowerManager.WakeLock wl = pm.newWakeLock( 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PowerManager.SCREEN_DIM_WAKE_LOCK 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * | PowerManager.ON_AFTER_RELEASE, 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TAG); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *wl.acquire(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // ... 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *wl.release(); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags Combination of flag values defining the requested behavior of the WakeLock. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag Your class name (or other tag) for debugging purposes. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see WakeLock#acquire() 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see WakeLock#release() 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WakeLock newWakeLock(int flags, String tag) 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WakeLock(flags, tag); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * User activity happened. 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Turns the device from whatever state it's in to full on, and resets 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the auto-off timer. 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param when is used to order this correctly with the wake lock calls. 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This time should be in the {@link SystemClock#uptimeMillis 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.uptimeMillis()} time base. 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param noChangeLights should be true if you don't want the lights to 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * turn on because of this event. This is set when the power 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key goes down. We want the device to stay on while the button 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is down, but we're about to turn off. Otherwise the lights 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flash on and then off and it looks weird. 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void userActivity(long when, boolean noChangeLights) 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.userActivity(when, noChangeLights); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Force the device to go to sleep. Overrides all the wake locks that are 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * held. 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param time is used to order this correctly with the wake lock calls. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time should be in the {@link SystemClock#uptimeMillis 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.uptimeMillis()} time base. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void goToSleep(long time) 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.goToSleep(time); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 405bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood 406237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood /** 407237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * sets the brightness of the backlights (screen, keyboard, button). 408237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * 409237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * @param brightness value from 0 to 255 410237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * 411237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * {@hide} 412237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood */ 413237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood public void setBacklightBrightness(int brightness) 414237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood { 415237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood try { 416237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood mService.setBacklightBrightness(brightness); 417237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } catch (RemoteException e) { 418237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } 419237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } 420237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood 421bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood /** 422bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * Returns the set of flags for {@link #newWakeLock(int, String) newWakeLock()} 423bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * that are supported on the device. 424bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * For example, to test to see if the {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} 425bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * is supported: 426bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 427bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@samplecode 428bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 429bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * int supportedFlags = pm.getSupportedWakeLockFlags(); 430bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * boolean proximitySupported = ((supportedFlags & PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) 431bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK); 432bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * } 433bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 434bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * @return the set of supported WakeLock flags. 435bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 436bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@hide} 437bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood */ 438bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood public int getSupportedWakeLockFlags() 439bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood { 440bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood try { 441bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood return mService.getSupportedWakeLockFlags(); 442bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } catch (RemoteException e) { 443bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood return 0; 444bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } 445bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } 446bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood 447322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis /** 448322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * Returns whether the screen is currently on. The screen could be bright 449322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * or dim. 450322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * 451322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * {@samplecode 452322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 453322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * boolean isScreenOn = pm.isScreenOn(); 454322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * } 455322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * 456322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis * @return whether the screen is on (bright or dim). 457322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis */ 458322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis public boolean isScreenOn() 459322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis { 460322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis try { 461322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis return mService.isScreenOn(); 462322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis } catch (RemoteException e) { 463322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis return false; 464322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis } 465322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis } 466322591cb4b158dc2edbc3d95cd02e44f132feb5fCharles Mendis 46750a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker /** 46850a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker * Reboot the device. Will not return if the reboot is 4696fd4e76ca1866772d125089e8f2e3f1d54fcae08Doug Zongker * successful. Requires the {@link android.Manifest.permission#REBOOT} 47050a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker * permission. 47150a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker * 47250a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker * @param reason code to pass to the kernel (e.g., "recovery") to 47350a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker * request special boot modes, or null. 47450a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker */ 47550a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker public void reboot(String reason) 47650a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker { 47750a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker try { 47850a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker mService.reboot(reason); 47950a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker } catch (RemoteException e) { 48050a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker } 48150a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker } 48250a21f4d3b70360b36acad20e234c380654fd59fDoug Zongker 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PowerManager() 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PowerManager(IPowerManager service, Handler handler) 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler = handler; 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: It would be nice to be able to set the poke lock here, 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but I'm not sure what would be acceptable as an interface - 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either a PokeLock object (like WakeLock) or, possibly just a 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method call to set the poke lock. 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IPowerManager mService; 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Handler mHandler; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 506