Whoops forgot the change to actually check for safe mode!

Change-Id: Iba0ad151ed786be8ae8659bfefe2a29776ce6311
diff --git a/policy/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/com/android/internal/policy/impl/PhoneWindowManager.java
index 4234247..b6b6b77 100755
--- a/policy/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -168,6 +168,12 @@
     // Vibrator pattern for haptic feedback of virtual key press.
     long[] mVirtualKeyVibePattern;
     
+    // Vibrator pattern for haptic feedback during boot when safe mode is disabled.
+    long[] mSafeModeDisabledVibePattern;
+    
+    // Vibrator pattern for haptic feedback during boot when safe mode is enabled.
+    long[] mSafeModeEnabledVibePattern;
+    
     /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */
     boolean mEnableShiftMenuBugReports = false;
     
@@ -534,6 +540,15 @@
         updatePlugged();
         // register for dock events
         context.registerReceiver(mDockReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT));
+        mVibrator = new Vibrator();
+        mLongPressVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_longPressVibePattern);
+        mVirtualKeyVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_virtualKeyVibePattern);
+        mSafeModeDisabledVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_safeModeDisabledVibePattern);
+        mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_safeModeEnabledVibePattern);
     }
 
     void updatePlugged() {
@@ -1971,8 +1986,15 @@
     public boolean detectSafeMode() {
         try {
             int menuState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_MENU);
-            mSafeMode = menuState > 0;
-            Log.i(TAG, "Menu key state: " + menuState + " safeMode=" + mSafeMode);
+            int sState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_S);
+            int dpadState = mWindowManager.getKeycodeState(KeyEvent.KEYCODE_DPAD_CENTER);
+            int trackballState = mWindowManager.getScancodeState(RawInputEvent.BTN_MOUSE);
+            mSafeMode = menuState > 0 || sState > 0 || dpadState > 0 || trackballState > 0;
+            performHapticFeedbackLw(null, mSafeMode
+                    ? HapticFeedbackConstants.SAFE_MODE_ENABLED
+                    : HapticFeedbackConstants.SAFE_MODE_DISABLED, true);
+            Log.i(TAG, "SAFEMODE: " + mSafeMode + "menu=" + menuState + " s=" + sState
+                    + " dpad=" + dpadState + " trackball=" + trackballState + ")");
             return mSafeMode;
         } catch (RemoteException e) {
             // Doom! (it's also local)
@@ -1994,25 +2016,11 @@
     
     /** {@inheritDoc} */
     public void systemReady() {
-        try {
-            if (mSafeMode) {
-                // If the user is holding the menu key code, then we are
-                // going to boot into safe mode.
-                ActivityManagerNative.getDefault().enterSafeMode();
-            }
-            // tell the keyguard
-            mKeyguardMediator.onSystemReady();
-            android.os.SystemProperties.set("dev.bootcomplete", "1"); 
-            synchronized (mLock) {
-                updateOrientationListenerLp();
-                mVibrator = new Vibrator();
-                mLongPressVibePattern = getLongIntArray(mContext.getResources(),
-                        com.android.internal.R.array.config_longPressVibePattern);
-                mVirtualKeyVibePattern = getLongIntArray(mContext.getResources(),
-                        com.android.internal.R.array.config_virtualKeyVibePattern);
-            }
-        } catch (RemoteException e) {
-            // Ignore
+        // tell the keyguard
+        mKeyguardMediator.onSystemReady();
+        android.os.SystemProperties.set("dev.bootcomplete", "1"); 
+        synchronized (mLock) {
+            updateOrientationListenerLp();
         }
     }
    
@@ -2177,6 +2185,15 @@
             case HapticFeedbackConstants.LONG_PRESS:
                 mVibrator.vibrate(mLongPressVibePattern, -1);
                 return true;
+            case HapticFeedbackConstants.VIRTUAL_KEY:
+                mVibrator.vibrate(mVirtualKeyVibePattern, -1);
+                return true;
+            case HapticFeedbackConstants.SAFE_MODE_DISABLED:
+                mVibrator.vibrate(mSafeModeDisabledVibePattern, -1);
+                return true;
+            case HapticFeedbackConstants.SAFE_MODE_ENABLED:
+                mVibrator.vibrate(mSafeModeEnabledVibePattern, -1);
+                return true;
         }
         return false;
     }
@@ -2184,10 +2201,7 @@
     public void keyFeedbackFromInput(KeyEvent event) {
         if (event.getAction() == KeyEvent.ACTION_DOWN
                 && (event.getFlags()&KeyEvent.FLAG_VIRTUAL_HARD_KEY) != 0) {
-            if (Settings.System.getInt(mContext.getContentResolver(),
-                    Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) != 0) {
-                mVibrator.vibrate(mVirtualKeyVibePattern, -1);
-            }
+            performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
         }
     }