Loading core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -4708,6 +4708,15 @@ public final class Settings { @Readable public static final String PEAK_REFRESH_RATE = "peak_refresh_rate"; /** * Control whether to stay awake on fold * * If this isn't set, the system falls back to a device specific default. * @hide */ @Readable public static final String STAY_AWAKE_ON_FOLD = "stay_awake_on_fold"; /** * The amount of time in milliseconds before the device goes to sleep or begins * to dream after a period of inactivity. This value is also known as the Loading packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class SystemSettings { Settings.System.TTY_MODE, Settings.System.MASTER_MONO, Settings.System.MASTER_BALANCE, Settings.System.STAY_AWAKE_ON_FOLD, Settings.System.SOUND_EFFECTS_ENABLED, Settings.System.HAPTIC_FEEDBACK_ENABLED, Settings.System.POWER_SOUNDS_ENABLED, // moved to global Loading packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java +1 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,7 @@ public class SystemSettingsValidators { VALIDATORS.put(System.WIFI_STATIC_DNS1, LENIENT_IP_ADDRESS_VALIDATOR); VALIDATORS.put(System.WIFI_STATIC_DNS2, LENIENT_IP_ADDRESS_VALIDATOR); VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR); VALIDATORS.put(System.STAY_AWAKE_ON_FOLD, BOOLEAN_VALIDATOR); VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR); VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR); Loading services/core/java/com/android/server/display/DisplayManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ import com.android.server.display.layout.Layout; import com.android.server.display.mode.DisplayModeDirector; import com.android.server.display.utils.SensorUtils; import com.android.server.input.InputManagerInternal; import com.android.server.utils.FoldSettingWrapper; import com.android.server.wm.SurfaceAnimationThread; import com.android.server.wm.WindowManagerInternal; Loading Loading @@ -540,7 +541,8 @@ public final class DisplayManagerService extends SystemService { mUiHandler = UiThread.getHandler(); mDisplayDeviceRepo = new DisplayDeviceRepository(mSyncRoot, mPersistentDataStore); mLogicalDisplayMapper = new LogicalDisplayMapper(mContext, mDisplayDeviceRepo, new LogicalDisplayListener(), mSyncRoot, mHandler); new LogicalDisplayListener(), mSyncRoot, mHandler, new FoldSettingWrapper(mContext.getContentResolver())); mDisplayModeDirector = new DisplayModeDirector(context, mHandler); mBrightnessSynchronizer = new BrightnessSynchronizer(mContext); Resources resources = mContext.getResources(); Loading services/core/java/com/android/server/display/LogicalDisplayMapper.java +12 −7 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.view.DisplayInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.server.display.layout.DisplayIdProducer; import com.android.server.display.layout.Layout; import com.android.server.utils.FoldSettingWrapper; import java.io.PrintWriter; import java.util.Arrays; Loading Loading @@ -142,6 +143,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { private final Listener mListener; private final DisplayManagerService.SyncRoot mSyncRoot; private final LogicalDisplayMapperHandler mHandler; private final FoldSettingWrapper mFoldSettingWrapper; private final PowerManager mPowerManager; /** Loading Loading @@ -189,21 +191,23 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo, @NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot, @NonNull Handler handler) { @NonNull Handler handler, FoldSettingWrapper foldSettingWrapper) { this(context, repo, listener, syncRoot, handler, new DeviceStateToLayoutMap((isDefault) -> isDefault ? DEFAULT_DISPLAY : sNextNonDefaultDisplayId++)); : sNextNonDefaultDisplayId++), foldSettingWrapper); } LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo, @NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot, @NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap) { @NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap, FoldSettingWrapper foldSettingWrapper) { mSyncRoot = syncRoot; mPowerManager = context.getSystemService(PowerManager.class); mInteractive = mPowerManager.isInteractive(); mHandler = new LogicalDisplayMapperHandler(handler.getLooper()); mDisplayDeviceRepo = repo; mListener = listener; mFoldSettingWrapper = foldSettingWrapper; mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false); mSupportsConcurrentInternalDisplays = context.getResources().getBoolean( com.android.internal.R.bool.config_supportsConcurrentInternalDisplays); Loading Loading @@ -531,9 +535,10 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { * Returns if the device should be put to sleep or not. * * Includes a check to verify that the device state that we are moving to, {@code pendingState}, * is the same as the physical state of the device, {@code baseState}. Different values for * these parameters indicate a device state override is active, and we shouldn't put the device * to sleep to provide a better user experience. * is the same as the physical state of the device, {@code baseState}. Also if the * 'Stay Awake On Fold' is not enabled. Different values for these parameters indicate a device * state override is active, and we shouldn't put the device to sleep to provide a better user * experience. * * @param pendingState device state we are moving to * @param currentState device state we are currently in Loading @@ -551,7 +556,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { && mDeviceStatesOnWhichToSleep.get(pendingState) && !mDeviceStatesOnWhichToSleep.get(currentState) && !isOverrideActive && isInteractive && isBootCompleted; && isInteractive && isBootCompleted && !mFoldSettingWrapper.shouldStayAwakeOnFold(); } private boolean areAllTransitioningDisplaysOffLocked() { Loading Loading
core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -4708,6 +4708,15 @@ public final class Settings { @Readable public static final String PEAK_REFRESH_RATE = "peak_refresh_rate"; /** * Control whether to stay awake on fold * * If this isn't set, the system falls back to a device specific default. * @hide */ @Readable public static final String STAY_AWAKE_ON_FOLD = "stay_awake_on_fold"; /** * The amount of time in milliseconds before the device goes to sleep or begins * to dream after a period of inactivity. This value is also known as the Loading
packages/SettingsProvider/src/android/provider/settings/backup/SystemSettings.java +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class SystemSettings { Settings.System.TTY_MODE, Settings.System.MASTER_MONO, Settings.System.MASTER_BALANCE, Settings.System.STAY_AWAKE_ON_FOLD, Settings.System.SOUND_EFFECTS_ENABLED, Settings.System.HAPTIC_FEEDBACK_ENABLED, Settings.System.POWER_SOUNDS_ENABLED, // moved to global Loading
packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java +1 −0 Original line number Diff line number Diff line Loading @@ -218,6 +218,7 @@ public class SystemSettingsValidators { VALIDATORS.put(System.WIFI_STATIC_DNS1, LENIENT_IP_ADDRESS_VALIDATOR); VALIDATORS.put(System.WIFI_STATIC_DNS2, LENIENT_IP_ADDRESS_VALIDATOR); VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR); VALIDATORS.put(System.STAY_AWAKE_ON_FOLD, BOOLEAN_VALIDATOR); VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR); VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR); Loading
services/core/java/com/android/server/display/DisplayManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ import com.android.server.display.layout.Layout; import com.android.server.display.mode.DisplayModeDirector; import com.android.server.display.utils.SensorUtils; import com.android.server.input.InputManagerInternal; import com.android.server.utils.FoldSettingWrapper; import com.android.server.wm.SurfaceAnimationThread; import com.android.server.wm.WindowManagerInternal; Loading Loading @@ -540,7 +541,8 @@ public final class DisplayManagerService extends SystemService { mUiHandler = UiThread.getHandler(); mDisplayDeviceRepo = new DisplayDeviceRepository(mSyncRoot, mPersistentDataStore); mLogicalDisplayMapper = new LogicalDisplayMapper(mContext, mDisplayDeviceRepo, new LogicalDisplayListener(), mSyncRoot, mHandler); new LogicalDisplayListener(), mSyncRoot, mHandler, new FoldSettingWrapper(mContext.getContentResolver())); mDisplayModeDirector = new DisplayModeDirector(context, mHandler); mBrightnessSynchronizer = new BrightnessSynchronizer(mContext); Resources resources = mContext.getResources(); Loading
services/core/java/com/android/server/display/LogicalDisplayMapper.java +12 −7 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.view.DisplayInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.server.display.layout.DisplayIdProducer; import com.android.server.display.layout.Layout; import com.android.server.utils.FoldSettingWrapper; import java.io.PrintWriter; import java.util.Arrays; Loading Loading @@ -142,6 +143,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { private final Listener mListener; private final DisplayManagerService.SyncRoot mSyncRoot; private final LogicalDisplayMapperHandler mHandler; private final FoldSettingWrapper mFoldSettingWrapper; private final PowerManager mPowerManager; /** Loading Loading @@ -189,21 +191,23 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo, @NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot, @NonNull Handler handler) { @NonNull Handler handler, FoldSettingWrapper foldSettingWrapper) { this(context, repo, listener, syncRoot, handler, new DeviceStateToLayoutMap((isDefault) -> isDefault ? DEFAULT_DISPLAY : sNextNonDefaultDisplayId++)); : sNextNonDefaultDisplayId++), foldSettingWrapper); } LogicalDisplayMapper(@NonNull Context context, @NonNull DisplayDeviceRepository repo, @NonNull Listener listener, @NonNull DisplayManagerService.SyncRoot syncRoot, @NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap) { @NonNull Handler handler, @NonNull DeviceStateToLayoutMap deviceStateToLayoutMap, FoldSettingWrapper foldSettingWrapper) { mSyncRoot = syncRoot; mPowerManager = context.getSystemService(PowerManager.class); mInteractive = mPowerManager.isInteractive(); mHandler = new LogicalDisplayMapperHandler(handler.getLooper()); mDisplayDeviceRepo = repo; mListener = listener; mFoldSettingWrapper = foldSettingWrapper; mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false); mSupportsConcurrentInternalDisplays = context.getResources().getBoolean( com.android.internal.R.bool.config_supportsConcurrentInternalDisplays); Loading Loading @@ -531,9 +535,10 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { * Returns if the device should be put to sleep or not. * * Includes a check to verify that the device state that we are moving to, {@code pendingState}, * is the same as the physical state of the device, {@code baseState}. Different values for * these parameters indicate a device state override is active, and we shouldn't put the device * to sleep to provide a better user experience. * is the same as the physical state of the device, {@code baseState}. Also if the * 'Stay Awake On Fold' is not enabled. Different values for these parameters indicate a device * state override is active, and we shouldn't put the device to sleep to provide a better user * experience. * * @param pendingState device state we are moving to * @param currentState device state we are currently in Loading @@ -551,7 +556,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { && mDeviceStatesOnWhichToSleep.get(pendingState) && !mDeviceStatesOnWhichToSleep.get(currentState) && !isOverrideActive && isInteractive && isBootCompleted; && isInteractive && isBootCompleted && !mFoldSettingWrapper.shouldStayAwakeOnFold(); } private boolean areAllTransitioningDisplaysOffLocked() { Loading