diff options
| -rw-r--r-- | services/core/java/com/android/server/display/DisplayManagerService.java | 30 | ||||
| -rw-r--r-- | services/core/java/com/android/server/display/LogicalDisplayMapper.java | 8 |
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) { |