Loading services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java +20 −20 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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") Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 **/ Loading @@ -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); } /** Loading services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java +7 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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 Loading Loading @@ -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()) Loading Loading
services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java +20 −20 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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") Loading Loading @@ -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 Loading Loading @@ -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; Loading @@ -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 **/ Loading @@ -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); } /** Loading
services/foldables/devicestateprovider/src/com/android/server/policy/TentModeDeviceStatePolicy.java +7 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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 Loading Loading @@ -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()) Loading