Ignore face down detector with shell command

- Shell command to ignore face down detector signals for testing

Bug: 329371579
Test: adb shell dumpsys power | grep mIsFaceDown -A1
Test: adb shell cmd power set-face-down-detector false
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:53ee705b9685926302dbf729f42ebbd0ad49666b)
Merged-In: I89970bda86e4624c4ef8e5c322cb03588ff719ad
Change-Id: I89970bda86e4624c4ef8e5c322cb03588ff719ad
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 , "");