diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index a172de0..ab29eb8 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -616,6 +616,7 @@
 
     // Value we store for tracking face down behavior.
     private boolean mIsFaceDown = false;
+    private boolean mUseFaceDownDetector = true;
     private long mLastFlipTime = 0L;
 
     // The screen brightness setting override from the window manager
@@ -3198,7 +3199,7 @@
             long screenOffTimeout, long screenDimDuration) {
         // If face down, we decrease the timeout to equal the dim duration so that the
         // device will go into a dim state.
-        if (mIsFaceDown) {
+        if (mIsFaceDown && mUseFaceDownDetector) {
             return Math.min(screenDimDuration, screenOffTimeout);
         }
         return screenOffTimeout;
@@ -4643,6 +4644,7 @@
             pw.println("  mHoldingDisplaySuspendBlocker=" + mHoldingDisplaySuspendBlocker);
             pw.println("  mLastFlipTime=" + mLastFlipTime);
             pw.println("  mIsFaceDown=" + mIsFaceDown);
+            pw.println("  mUseFaceDownDetector=" + mUseFaceDownDetector);
 
             pw.println();
             pw.println("Settings and Configuration:");
@@ -6840,6 +6842,16 @@
                 Binder.restoreCallingIdentity(ident);
             }
         }
+
+        public void setUseFaceDownDetector(boolean enable) {
+            final long ident = Binder.clearCallingIdentity();
+            try {
+                mUseFaceDownDetector = enable;
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
+
     }
 
     @VisibleForTesting
diff --git a/services/core/java/com/android/server/power/PowerManagerShellCommand.java b/services/core/java/com/android/server/power/PowerManagerShellCommand.java
index 9439b76..20184e9f 100644
--- a/services/core/java/com/android/server/power/PowerManagerShellCommand.java
+++ b/services/core/java/com/android/server/power/PowerManagerShellCommand.java
@@ -63,6 +63,8 @@
                     return runListAmbientDisplaySuppressionTokens();
                 case "set-prox":
                     return runSetProx();
+                case "set-face-down-detector":
+                    return runSetFaceDownDetector();
                 default:
                     return handleDefaultCommands(cmd);
             }
@@ -178,6 +180,20 @@
         return 0;
     }
 
+    /**
+     * To be used for testing - allowing us to disable the usage of face down detector.
+     */
+    private int runSetFaceDownDetector() {
+        try {
+            mService.setUseFaceDownDetector(Boolean.parseBoolean(getNextArgRequired()));
+        } catch (Exception e) {
+            PrintWriter pw = getOutPrintWriter();
+            pw.println("Error: " + e);
+            return -1;
+        }
+        return 0;
+    }
+
     @Override
     public void onHelp() {
         final PrintWriter pw = getOutPrintWriter();
@@ -203,6 +219,8 @@
         pw.println("    Acquires the proximity sensor wakelock. Wakelock is associated with");
         pw.println("    a specific display if specified. 'list' lists wakelocks previously");
         pw.println("    created by set-prox including their held status.");
+        pw.println("  set-face-down-detector [true|false]");
+        pw.println("    sets whether we use face down detector timeouts or not");
 
         pw.println();
         Intent.printIntentArgsHelp(pw , "");
