PowerManager.java revision 237a29923a05663a2195bf93b392768dbaf31ebf
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 /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Normally wake locks don't actually wake the device, they just cause 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it to remain on once it's already on. Think of the video player 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * app as the normal behavior. Notifications that pop up and want 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device to be on are the exception; use this flag to be like them. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not work with PARTIAL_WAKE_LOCKs. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ACQUIRE_CAUSES_WAKEUP = 0x10000000; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this wake lock is released, poke the user activity timer 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so the screen stays on for a little longer. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Will not turn the screen on if it is not already on. See {@link #ACQUIRE_CAUSES_WAKEUP} 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you want that. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Does not work with PARTIAL_WAKE_LOCKs. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ON_AFTER_RELEASE = 0x20000000; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Class lets you say that you need to have the device on. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Call release when you are done and don't need the lock anymore. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public class WakeLock 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int RELEASE_WAKE_LOCK = 1; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Runnable mReleaser = new Runnable() { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project release(); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mFlags; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String mTag; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBinder mToken; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCount = 0; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mRefCounted = true; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mHeld = false; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WakeLock(int flags, String tag) 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (flags & LOCK_MASK) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PARTIAL_WAKE_LOCK: 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SCREEN_DIM_WAKE_LOCK: 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SCREEN_BRIGHT_WAKE_LOCK: 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case FULL_WAKE_LOCK: 211bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood case PROXIMITY_SCREEN_OFF_WAKE_LOCK: 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags = flags; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTag = tag; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken = new Binder(); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether this WakeLock is ref counted. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param value true for ref counted, false for not ref counted. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setReferenceCounted(boolean value) 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRefCounted = value; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes sure the device is on at the level you asked when you created 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the wake lock. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void acquire() 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mRefCounted || mCount++ == 0) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.acquireWakeLock(mFlags, mToken, mTag); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeld = true; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Makes sure the device is on at the level you asked when you created 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the wake lock. The lock will be released after the given timeout. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timeout Release the lock after the give timeout in milliseconds. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void acquire(long timeout) { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project acquire(); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.postDelayed(mReleaser, timeout); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Release your claim to the CPU or screen being on. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It may turn off shortly after you release it, or it may not if there 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are other wake locks held. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void release() 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mRefCounted || --mCount == 0) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.releaseWakeLock(mToken); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHeld = false; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCount < 0) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("WakeLock under-locked " + mTag); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isHeld() 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHeld; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "WakeLock{" 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + Integer.toHexString(System.identityHashCode(this)) 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " held=" + mHeld + ", refCount=" + mCount + "}"; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mToken) { 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mHeld) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.releaseWakeLock(mToken); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RuntimeInit.crash(TAG, new Exception( 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "WakeLock finalized while still held: "+mTag)); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get a wake lock at the level of the flags parameter. Call 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link WakeLock#acquire() acquire()} on the object to acquire the 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wake lock, and {@link WakeLock#release release()} when you are done. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@samplecode 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *PowerManager pm = (PowerManager)mContext.getSystemService( 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Context.POWER_SERVICE); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *PowerManager.WakeLock wl = pm.newWakeLock( 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PowerManager.SCREEN_DIM_WAKE_LOCK 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * | PowerManager.ON_AFTER_RELEASE, 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TAG); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *wl.acquire(); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // ... 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *wl.release(); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags Combination of flag values defining the requested behavior of the WakeLock. 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag Your class name (or other tag) for debugging purposes. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see WakeLock#acquire() 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see WakeLock#release() 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WakeLock newWakeLock(int flags, String tag) 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WakeLock(flags, tag); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * User activity happened. 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Turns the device from whatever state it's in to full on, and resets 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the auto-off timer. 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param when is used to order this correctly with the wake lock calls. 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This time should be in the {@link SystemClock#uptimeMillis 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.uptimeMillis()} time base. 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param noChangeLights should be true if you don't want the lights to 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * turn on because of this event. This is set when the power 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key goes down. We want the device to stay on while the button 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is down, but we're about to turn off. Otherwise the lights 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flash on and then off and it looks weird. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void userActivity(long when, boolean noChangeLights) 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.userActivity(when, noChangeLights); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Force the device to go to sleep. Overrides all the wake locks that are 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * held. 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param time is used to order this correctly with the wake lock calls. 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The time should be in the {@link SystemClock#uptimeMillis 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SystemClock.uptimeMillis()} time base. 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void goToSleep(long time) 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService.goToSleep(time); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 381bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood 382237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood /** 383237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * sets the brightness of the backlights (screen, keyboard, button). 384237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * 385237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * @param brightness value from 0 to 255 386237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * 387237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood * {@hide} 388237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood */ 389237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood public void setBacklightBrightness(int brightness) 390237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood { 391237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood try { 392237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood mService.setBacklightBrightness(brightness); 393237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } catch (RemoteException e) { 394237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } 395237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood } 396237a29923a05663a2195bf93b392768dbaf31ebfMike Lockwood 397bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood /** 398bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * Returns the set of flags for {@link #newWakeLock(int, String) newWakeLock()} 399bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * that are supported on the device. 400bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * For example, to test to see if the {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} 401bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * is supported: 402bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 403bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@samplecode 404bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 405bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * int supportedFlags = pm.getSupportedWakeLockFlags(); 406bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * boolean proximitySupported = ((supportedFlags & PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK) 407bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * == PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK); 408bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * } 409bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 410bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * @return the set of supported WakeLock flags. 411bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * 412bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood * {@hide} 413bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood */ 414bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood public int getSupportedWakeLockFlags() 415bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood { 416bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood try { 417bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood return mService.getSupportedWakeLockFlags(); 418bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } catch (RemoteException e) { 419bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood return 0; 420bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } 421bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood } 422bc706a03a25f0dfe2cb0ecd1f6e4f7be905592a7Mike Lockwood 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PowerManager() 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PowerManager(IPowerManager service, Handler handler) 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mService = service; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler = handler; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: It would be nice to be able to set the poke lock here, 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but I'm not sure what would be acceptable as an interface - 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either a PokeLock object (like WakeLock) or, possibly just a 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method call to set the poke lock. 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IPowerManager mService; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Handler mHandler; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 447