Merge "Device State Manager drives LogicalDisplayMapper"

This commit is contained in:
Santos Cordon
2021-01-15 18:57:13 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 15 deletions

View File

@@ -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);
}
}
};

View File

@@ -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) {