Merge "Refactor Function into Predicate." into main
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
index d13b543..4c487a7 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
@@ -57,7 +57,7 @@
 import java.util.Comparator;
 import java.util.List;
 import java.util.function.BooleanSupplier;
-import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * Device state provider for foldable devices.
@@ -93,6 +93,7 @@
     private final Sensor mHingeAngleSensor;
     private final DisplayManager mDisplayManager;
     private final Sensor mHallSensor;
+    private static final Predicate<FoldableDeviceStateProvider> ALLOWED = p -> true;
 
     @Nullable
     @GuardedBy("mLock")
@@ -202,14 +203,12 @@
 
     private void initialiseStateConditions(DeviceStateConfiguration configuration) {
         mStateConditions.put(configuration.mDeviceState.getIdentifier(), () ->
-                configuration.mActiveStatePredicate.apply(this));
+                configuration.mActiveStatePredicate.test(this));
     }
 
     private void initialiseStateAvailabilityConditions(DeviceStateConfiguration configuration) {
-        if (configuration.mAvailabilityPredicate != null) {
             mStateAvailabilityConditions.put(configuration.mDeviceState.getIdentifier(), () ->
-                    configuration.mAvailabilityPredicate.apply(this));
-        }
+                    configuration.mAvailabilityPredicate.test(this));
     }
 
     @Override
@@ -419,19 +418,20 @@
      */
     public static class DeviceStateConfiguration {
         private final DeviceState mDeviceState;
-        private final Function<FoldableDeviceStateProvider, Boolean> mActiveStatePredicate;
-        private final Function<FoldableDeviceStateProvider, Boolean> mAvailabilityPredicate;
+        private final Predicate<FoldableDeviceStateProvider> mActiveStatePredicate;
+        private final Predicate<FoldableDeviceStateProvider> mAvailabilityPredicate;
 
         private DeviceStateConfiguration(
-                DeviceState deviceState,
-                Function<FoldableDeviceStateProvider, Boolean> predicate) {
-            this(deviceState, predicate, null);
+                @NonNull DeviceState deviceState,
+                @NonNull Predicate<FoldableDeviceStateProvider> predicate) {
+            this(deviceState, predicate, ALLOWED);
         }
 
         private DeviceStateConfiguration(
-                DeviceState deviceState,
-                Function<FoldableDeviceStateProvider, Boolean> activeStatePredicate,
-                Function<FoldableDeviceStateProvider, Boolean> availabilityPredicate) {
+                @NonNull DeviceState deviceState,
+                @NonNull Predicate<FoldableDeviceStateProvider> activeStatePredicate,
+                @NonNull Predicate<FoldableDeviceStateProvider> availabilityPredicate) {
+
             mDeviceState = deviceState;
             mActiveStatePredicate = activeStatePredicate;
             mAvailabilityPredicate = availabilityPredicate;
@@ -441,19 +441,19 @@
                 @IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier,
                 @NonNull String name,
                 @DeviceState.DeviceStateFlags int flags,
-                Function<FoldableDeviceStateProvider, Boolean> predicate
+                @NonNull Predicate<FoldableDeviceStateProvider> activeStatePredicate
         ) {
             return new DeviceStateConfiguration(new DeviceState(identifier, name, flags),
-                    predicate);
+                    activeStatePredicate);
         }
 
         public static DeviceStateConfiguration createConfig(
                 @IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier,
                 @NonNull String name,
-                Function<FoldableDeviceStateProvider, Boolean> predicate
+                @NonNull Predicate<FoldableDeviceStateProvider> activeStatePredicate
         ) {
             return new DeviceStateConfiguration(new DeviceState(identifier, name, /* flags= */ 0),
-                    predicate);
+                    activeStatePredicate);
         }
 
         /** Create a configuration with availability predicate **/
@@ -461,11 +461,11 @@
                 @IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier,
                 @NonNull String name,
                 @DeviceState.DeviceStateFlags int flags,
-                Function<FoldableDeviceStateProvider, Boolean> predicate,
-                Function<FoldableDeviceStateProvider, Boolean> availabilityPredicate
+                @NonNull Predicate<FoldableDeviceStateProvider> activeStatePredicate,
+                @NonNull Predicate<FoldableDeviceStateProvider> availabilityPredicate
         ) {
             return new DeviceStateConfiguration(new DeviceState(identifier, name, flags),
-                predicate, availabilityPredicate);
+                    activeStatePredicate, availabilityPredicate);
         }
 
         /**
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java b/services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java
index ddac88a..5968b63 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java
@@ -36,6 +36,8 @@
 import com.android.server.policy.feature.flags.FeatureFlags;
 import com.android.server.policy.feature.flags.FeatureFlagsImpl;
 
+import java.util.function.Predicate;
+
 /**
  * Device state policy for a foldable device that supports tent mode: a mode when the device
  * keeps the outer display on until reaching a certain hinge angle threshold.
@@ -58,6 +60,8 @@
     private final DeviceStateProvider mProvider;
 
     private final boolean mIsDualDisplayBlockingEnabled;
+    private static final Predicate<FoldableDeviceStateProvider> ALLOWED = p -> true;
+    private static final Predicate<FoldableDeviceStateProvider> NOT_ALLOWED = p -> false;
 
     /**
      * Creates TentModeDeviceStatePolicy
@@ -102,17 +106,17 @@
                         }),
                 createConfig(DEVICE_STATE_OPENED,
                         /* name= */ "OPENED",
-                        /* activeStatePredicate= */ (provider) -> true),
+                        /* activeStatePredicate= */ ALLOWED),
                 createConfig(DEVICE_STATE_REAR_DISPLAY_STATE,
                         /* name= */ "REAR_DISPLAY_STATE",
                         /* flags= */ FLAG_EMULATED_ONLY,
-                        /* activeStatePredicate= */ (provider) -> false),
+                        /* activeStatePredicate= */ NOT_ALLOWED),
                 createConfig(DEVICE_STATE_CONCURRENT_INNER_DEFAULT,
                         /* name= */ "CONCURRENT_INNER_DEFAULT",
                         /* flags= */ FLAG_EMULATED_ONLY | FLAG_CANCEL_WHEN_REQUESTER_NOT_ON_TOP
                                 | FLAG_UNSUPPORTED_WHEN_THERMAL_STATUS_CRITICAL
                                 | FLAG_UNSUPPORTED_WHEN_POWER_SAVE_MODE,
-                        /* activeStatePredicate= */ (provider) -> false,
+                        /* activeStatePredicate= */ NOT_ALLOWED,
                         /* availabilityPredicate= */
                         provider -> !mIsDualDisplayBlockingEnabled
                                 || provider.hasNoConnectedExternalDisplay())