Disable hinge sensor while the screen is off

This allows to save some power while the device is unfolded but with screen off.

+ Avoiding registering more listeners if HingeSensorAngleProvider.start() is called multiple times sequentially without a `stop` in the middle. It seems that otherwise we would get duplicated callbacks.

+ Adding onScreenTurningOn and onScreenTurningOff callbacks to forward to Launcher (as only sysui is receiving them)

Bug: 240661156
Bug: 240374404
Test: DeviceFoldStateProviderTest && LauncherFoldAnimationTest (e2e)
Change-Id: I769643321c4819c145aac1b0a32a80d5738951c2
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 52a37c5..c46926e 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -270,6 +270,18 @@
             MAIN_EXECUTOR.execute(ProxyScreenStatusProvider.INSTANCE::onScreenTurnedOn);
         }
 
+        @BinderThread
+        @Override
+        public void onScreenTurningOn() {
+            MAIN_EXECUTOR.execute(ProxyScreenStatusProvider.INSTANCE::onScreenTurningOn);
+        }
+
+        @BinderThread
+        @Override
+        public void onScreenTurningOff() {
+            MAIN_EXECUTOR.execute(ProxyScreenStatusProvider.INSTANCE::onScreenTurningOff);
+        }
+
         /**
          * Preloads the Overview activity.
          *
diff --git a/quickstep/src/com/android/quickstep/util/ProxyScreenStatusProvider.java b/quickstep/src/com/android/quickstep/util/ProxyScreenStatusProvider.java
index 3777c65..8f79ccf 100644
--- a/quickstep/src/com/android/quickstep/util/ProxyScreenStatusProvider.java
+++ b/quickstep/src/com/android/quickstep/util/ProxyScreenStatusProvider.java
@@ -39,6 +39,16 @@
         mListeners.forEach(ScreenListener::onScreenTurnedOn);
     }
 
+    /** Called when the screen is starting to turn on. */
+    public void onScreenTurningOn() {
+        mListeners.forEach(ScreenListener::onScreenTurningOn);
+    }
+
+    /** Called when the screen is starting to turn off. */
+    public void onScreenTurningOff() {
+        mListeners.forEach(ScreenListener::onScreenTurningOff);
+    }
+
     @Override
     public void addCallback(@NonNull ScreenListener listener) {
         mListeners.add(listener);