Keyguard sound needs to hold wake lock.

We need to hold a wakelock while playing the keyguard lock sound,
so that it actually completes before the CPU goes to sleep.

Change-Id: I144c345383afeb911ea461b2eb17b31183b6d092
diff --git a/media/java/android/media/Ringtone.java b/media/java/android/media/Ringtone.java
index 0ce3526..f2c1694 100644
--- a/media/java/android/media/Ringtone.java
+++ b/media/java/android/media/Ringtone.java
@@ -203,7 +203,22 @@
         mUri = uri;
         openMediaPlayer();
     }
-    
+
+    /** @hide */
+    public void setWakeMode(Context context, int mode) {
+        if (mAudio == null) {
+            try {
+                openMediaPlayer();
+            } catch (Exception ex) {
+                Log.e(TAG, "setWakeMode() caught ", ex);
+                mAudio = null;
+            }
+        }
+        if (mAudio != null) {
+            mAudio.setWakeMode(context, mode);
+        }
+    }
+
     /**
      * Plays the ringtone.
      */
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
index 5d3dee9..0f1d633 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -1054,6 +1054,7 @@
                     final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
                     if (sfx != null) {
                         sfx.setStreamType(AudioManager.STREAM_SYSTEM);
+                        sfx.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);
                         sfx.play();
                     } else {
                         if (DEBUG) Log.d(TAG, "playSounds: failed to load ringtone from uri: "