Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb6d274d authored by Orhan Uysal's avatar Orhan Uysal
Browse files

Refactor Function into Predicate.

A Function<T, Boolean> is a Predicate<T>, thus we can use a predicate
instead of it.

Test: Manual
Test: atest FoldableDeviceStateProviderTest
Bug: 278667199
Change-Id: Ia3ef59226a73a0227bf1234a37740640d1ac9494
parent 26478200
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ import java.util.Arrays;
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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider,
    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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider,

    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 final class FoldableDeviceStateProvider implements DeviceStateProvider,
     */
    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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider,
                @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 @@ public final class FoldableDeviceStateProvider implements DeviceStateProvider,
                @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);
        }

        /**
+7 −3
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ import com.android.server.policy.FoldableDeviceStateProvider.DeviceStateConfigur
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 @@ public class TentModeDeviceStatePolicy extends DeviceStatePolicy {
    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 @@ public class TentModeDeviceStatePolicy extends DeviceStatePolicy {
                        }),
                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())