summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java30
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplayMapper.java8
2 files changed, 23 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 60e4595a7679..55103ca6cd1c 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -49,6 +49,7 @@ import android.database.ContentObserver;
import android.graphics.ColorSpace;
import android.graphics.Point;
import android.hardware.SensorManager;
+import android.hardware.devicestate.DeviceStateManager;
import android.hardware.display.AmbientBrightnessDayStats;
import android.hardware.display.BrightnessChangeEvent;
import android.hardware.display.BrightnessConfiguration;
@@ -71,6 +72,7 @@ import android.media.projection.IMediaProjectionManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Handler;
+import android.os.HandlerExecutor;
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
import android.os.Looper;
@@ -100,7 +102,6 @@ import android.util.Spline;
import android.view.Display;
import android.view.DisplayEventReceiver;
import android.view.DisplayInfo;
-import android.view.IDisplayFoldListener;
import android.view.Surface;
import android.view.SurfaceControl;
@@ -114,7 +115,6 @@ import com.android.server.DisplayThread;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.UiThread;
-import com.android.server.policy.WindowManagerPolicy;
import com.android.server.wm.SurfaceAnimationThread;
import com.android.server.wm.WindowManagerInternal;
@@ -360,8 +360,8 @@ public final class DisplayManagerService extends SystemService {
// Receives notifications about changes to Settings.
private SettingsObserver mSettingsObserver;
- // Received notifications of the display-fold action
- private DisplayFoldListener mDisplayFoldListener;
+ // Received notifications of the device-state action (such as "fold", "unfold")
+ private DeviceStateManager mDeviceStateManager;
private final boolean mAllowNonNativeRefreshRateOverride;
@@ -504,10 +504,11 @@ public final class DisplayManagerService extends SystemService {
synchronized (mSyncRoot) {
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mInputManagerInternal = LocalServices.getService(InputManagerInternal.class);
- WindowManagerPolicy policy = LocalServices.getService(WindowManagerPolicy.class);
- mDisplayFoldListener = new DisplayFoldListener();
- policy.registerDisplayFoldListener(mDisplayFoldListener);
+ DeviceStateManager deviceStateManager =
+ mContext.getSystemService(DeviceStateManager.class);
+ deviceStateManager.registerDeviceStateListener(new DeviceStateListener(),
+ new HandlerExecutor(mHandler));
scheduleTraversalLocked(false);
}
@@ -2880,15 +2881,14 @@ public final class DisplayManagerService extends SystemService {
}
}
- class DisplayFoldListener extends IDisplayFoldListener.Stub {
+ /**
+ * Listens to changes in device state and reports the state to LogicalDisplayMapper.
+ */
+ class DeviceStateListener implements DeviceStateManager.DeviceStateListener {
@Override
- public void onDisplayFoldChanged(int displayId, boolean folded) {
- // TODO: multi-display - IDisplayFoldListener callback only really works for the
- // Display.DEFAULT_DISPLAY.
- if (displayId == Display.DEFAULT_DISPLAY) {
- synchronized (mSyncRoot) {
- mLogicalDisplayMapper.setDeviceFoldedLocked(folded);
- }
+ public void onDeviceStateChanged(int deviceState) {
+ synchronized (mSyncRoot) {
+ mLogicalDisplayMapper.setDeviceStateLocked(deviceState);
}
}
};
diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
index a12785889bd3..bb2fbed354aa 100644
--- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java
+++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
@@ -103,6 +103,7 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
private final DisplayDeviceRepository mDisplayDeviceRepo;
private final Listener mListener;
+ private final int mFoldedDeviceState;
LogicalDisplayMapper(Context context, DisplayDeviceRepository repo, Listener listener) {
mDisplayDeviceRepo = repo;
@@ -110,6 +111,9 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
mSingleDisplayDemoMode = SystemProperties.getBoolean("persist.demo.singledisplay", false);
mDisplayDeviceRepo.addListener(this);
+ mFoldedDeviceState = context.getResources().getInteger(
+ com.android.internal.R.integer.config_foldedDeviceState);
+
loadFoldedDisplayConfig(context);
}
@@ -211,6 +215,10 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
}
}
+ void setDeviceStateLocked(int state) {
+ setDeviceFoldedLocked(state == mFoldedDeviceState);
+ }
+
void setDeviceFoldedLocked(boolean isFolded) {
mIsFolded = isFolded;
if (mIsFoldedOverride != null) {