diff options
| -rw-r--r-- | core/java/com/android/internal/app/ShutdownThread.java | 31 | 
1 files changed, 24 insertions, 7 deletions
| diff --git a/core/java/com/android/internal/app/ShutdownThread.java b/core/java/com/android/internal/app/ShutdownThread.java index e35edc3400b0..37d98beb41d7 100644 --- a/core/java/com/android/internal/app/ShutdownThread.java +++ b/core/java/com/android/internal/app/ShutdownThread.java @@ -67,7 +67,8 @@ public final class ShutdownThread extends Thread {      private boolean mActionDone;      private Context mContext;      private PowerManager mPowerManager; -    private PowerManager.WakeLock mWakeLock; +    private PowerManager.WakeLock mCpuWakeLock; +    private PowerManager.WakeLock mScreenWakeLock;      private Handler mHandler;      private ShutdownThread() { @@ -155,20 +156,36 @@ public final class ShutdownThread extends Thread {          pd.show(); -        // start the thread that initiates shutdown          sInstance.mContext = context;          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()) {              try { -                sInstance.mWakeLock = sInstance.mPowerManager.newWakeLock( -                        PowerManager.FULL_WAKE_LOCK, "Shutdown"); -                sInstance.mWakeLock.acquire(); +                sInstance.mScreenWakeLock = sInstance.mPowerManager.newWakeLock( +                        PowerManager.FULL_WAKE_LOCK, TAG + "-screen"); +                sInstance.mScreenWakeLock.setReferenceCounted(false); +                sInstance.mScreenWakeLock.acquire();              } catch (SecurityException 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.start(); |