diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 40e11cb92d3ec..3d0c5f1a68feb 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -654,10 +654,9 @@ The default is false. --> false - - false + + -1 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index e50eee6afa913..9a08a494021b0 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3701,7 +3701,7 @@ - + diff --git a/services/core/java/com/android/server/policy/DisplayFoldController.java b/services/core/java/com/android/server/policy/DisplayFoldController.java index b007a75c1ca5f..ff51237a900a8 100644 --- a/services/core/java/com/android/server/policy/DisplayFoldController.java +++ b/services/core/java/com/android/server/policy/DisplayFoldController.java @@ -20,12 +20,10 @@ import android.annotation.Nullable; import android.content.Context; import android.graphics.Rect; import android.hardware.ICameraService; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; +import android.hardware.devicestate.DeviceStateManager; import android.hardware.display.DisplayManagerInternal; import android.os.Handler; +import android.os.HandlerExecutor; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.util.Slog; @@ -63,7 +61,8 @@ class DisplayFoldController { private String mFocusedApp; private final DisplayFoldDurationLogger mDurationLogger = new DisplayFoldDurationLogger(); - DisplayFoldController(WindowManagerInternal windowManagerInternal, + DisplayFoldController( + Context context, WindowManagerInternal windowManagerInternal, DisplayManagerInternal displayManagerInternal, @Nullable CameraServiceProxy cameraServiceProxy, int displayId, Rect foldedArea, Handler handler) { @@ -73,6 +72,10 @@ class DisplayFoldController { mDisplayId = displayId; mFoldedArea = new Rect(foldedArea); mHandler = handler; + + DeviceStateManager deviceStateManager = context.getSystemService(DeviceStateManager.class); + deviceStateManager.registerDeviceStateListener(new DeviceStateListener(context), + new HandlerExecutor(handler)); } void finishedGoingToSleep() { @@ -83,11 +86,7 @@ class DisplayFoldController { mDurationLogger.onFinishedWakingUp(mFolded); } - void requestDeviceFolded(boolean folded) { - mHandler.post(() -> setDeviceFolded(folded)); - } - - void setDeviceFolded(boolean folded) { + private void setDeviceFolded(boolean folded) { if (mFolded != null && mFolded == folded) { return; } @@ -179,33 +178,6 @@ class DisplayFoldController { } } - /** - * Only used for the case that persist.debug.force_foldable is set. - * This is using proximity sensor to simulate the fold state switch. - */ - static DisplayFoldController createWithProxSensor(Context context, int displayId) { - final SensorManager sensorManager = context.getSystemService(SensorManager.class); - final Sensor proxSensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); - if (proxSensor == null) { - return null; - } - - final DisplayFoldController result = create(context, displayId); - sensorManager.registerListener(new SensorEventListener() { - @Override - public void onSensorChanged(SensorEvent event) { - result.requestDeviceFolded(event.values[0] < 1f); - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - // Ignore. - } - }, proxSensor, SensorManager.SENSOR_DELAY_NORMAL); - - return result; - } - void onDefaultDisplayFocusChanged(String pkg) { mFocusedApp = pkg; } @@ -227,7 +199,26 @@ class DisplayFoldController { foldedArea = Rect.unflattenFromString(configFoldedArea); } - return new DisplayFoldController(windowManagerService, displayService, cameraServiceProxy, - displayId, foldedArea, DisplayThread.getHandler()); + return new DisplayFoldController(context, windowManagerService, displayService, + cameraServiceProxy, displayId, foldedArea, DisplayThread.getHandler()); + } + + /** + * Listens to changes in device state and reports the state as folded if the device state + * matches the value in the {@link com.android.internal.R.integer.config_foldedDeviceState} + * resource. + */ + private class DeviceStateListener implements DeviceStateManager.DeviceStateListener { + private final int mFoldedDeviceState; + + DeviceStateListener(Context context) { + mFoldedDeviceState = context.getResources().getInteger( + com.android.internal.R.integer.config_foldedDeviceState); + } + + @Override + public void onDeviceStateChanged(int deviceState) { + setDeviceFolded(deviceState == mFoldedDeviceState); + } } } diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index ea985df1c6b8f..4fa8c8e1395df 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -472,7 +472,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { int mLidKeyboardAccessibility; int mLidNavigationAccessibility; - private boolean mLidControlsDisplayFold; int mShortPressOnPowerBehavior; int mLongPressOnPowerBehavior; int mVeryLongPressOnPowerBehavior; @@ -1789,8 +1788,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.integer.config_lidKeyboardAccessibility); mLidNavigationAccessibility = mContext.getResources().getInteger( com.android.internal.R.integer.config_lidNavigationAccessibility); - mLidControlsDisplayFold = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_lidControlsDisplayFold); mAllowTheaterModeWakeFromKey = mContext.getResources().getBoolean( com.android.internal.R.bool.config_allowTheaterModeWakeFromKey); @@ -1847,12 +1844,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { readConfigurationDependentBehaviors(); - if (mLidControlsDisplayFold) { - mDisplayFoldController = DisplayFoldController.create(context, DEFAULT_DISPLAY); - } else if (SystemProperties.getBoolean("persist.debug.force_foldable", false)) { - mDisplayFoldController = DisplayFoldController.createWithProxSensor(context, - DEFAULT_DISPLAY); - } + mDisplayFoldController = DisplayFoldController.create(context, DEFAULT_DISPLAY); mAccessibilityManager = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); @@ -4853,9 +4845,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private void applyLidSwitchState() { final int lidState = mDefaultDisplayPolicy.getLidState(); - if (mLidControlsDisplayFold && mDisplayFoldController != null) { - mDisplayFoldController.requestDeviceFolded(lidState == LID_CLOSED); - } else if (lidState == LID_CLOSED) { + if (lidState == LID_CLOSED) { int lidBehavior = getLidBehavior(); switch (lidBehavior) { case LID_BEHAVIOR_LOCK: diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 92c64f822b782..242cee8eaccd1 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1281,6 +1281,10 @@ public final class SystemServer implements Dumpable { inputManager = new InputManagerService(context); t.traceEnd(); + t.traceBegin("DeviceStateManagerService"); + mSystemServiceManager.startService(DeviceStateManagerService.class); + t.traceEnd(); + if (!disableCameraService) { t.traceBegin("StartCameraServiceProxy"); mSystemServiceManager.startService(CameraServiceProxy.class); @@ -1374,10 +1378,6 @@ public final class SystemServer implements Dumpable { mSystemServiceManager.startService(AppIntegrityManagerService.class); t.traceEnd(); - t.traceBegin("DeviceStateManagerService"); - mSystemServiceManager.startService(DeviceStateManagerService.class); - t.traceEnd(); - } catch (Throwable e) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting core service");