Merge "Hold partial wakelock during shutdown to avoid entering sleep"

This commit is contained in:
Jean-Baptiste Queru
2010-10-10 18:41:58 -07:00
committed by Android Code Review

View File

@@ -67,7 +67,8 @@ public final class ShutdownThread extends Thread {
private boolean mActionDone; private boolean mActionDone;
private Context mContext; private Context mContext;
private PowerManager mPowerManager; private PowerManager mPowerManager;
private PowerManager.WakeLock mWakeLock; private PowerManager.WakeLock mCpuWakeLock;
private PowerManager.WakeLock mScreenWakeLock;
private Handler mHandler; private Handler mHandler;
private ShutdownThread() { private ShutdownThread() {
@@ -155,20 +156,36 @@ public final class ShutdownThread extends Thread {
pd.show(); pd.show();
// start the thread that initiates shutdown
sInstance.mContext = context; sInstance.mContext = context;
sInstance.mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); sInstance.mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
sInstance.mWakeLock = null;
// make sure we never fall asleep again
sInstance.mCpuWakeLock = null;
try {
sInstance.mCpuWakeLock = sInstance.mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, TAG + "-cpu");
sInstance.mCpuWakeLock.setReferenceCounted(false);
sInstance.mCpuWakeLock.acquire();
} catch (SecurityException e) {
Log.w(TAG, "No permission to acquire wake lock", e);
sInstance.mCpuWakeLock = null;
}
// also make sure the screen stays on for better user experience
sInstance.mScreenWakeLock = null;
if (sInstance.mPowerManager.isScreenOn()) { if (sInstance.mPowerManager.isScreenOn()) {
try { try {
sInstance.mWakeLock = sInstance.mPowerManager.newWakeLock( sInstance.mScreenWakeLock = sInstance.mPowerManager.newWakeLock(
PowerManager.FULL_WAKE_LOCK, "Shutdown"); PowerManager.FULL_WAKE_LOCK, TAG + "-screen");
sInstance.mWakeLock.acquire(); sInstance.mScreenWakeLock.setReferenceCounted(false);
sInstance.mScreenWakeLock.acquire();
} catch (SecurityException e) { } catch (SecurityException e) {
Log.w(TAG, "No permission to acquire wake lock", e); Log.w(TAG, "No permission to acquire wake lock", e);
sInstance.mWakeLock = null; sInstance.mScreenWakeLock = null;
} }
} }
// start the thread that initiates shutdown
sInstance.mHandler = new Handler() { sInstance.mHandler = new Handler() {
}; };
sInstance.start(); sInstance.start();