Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfd8eefe authored by Santos Cordon's avatar Santos Cordon
Browse files

Device State Manager drives LogicalDisplayMapper

Test: Manual, atest DisplayManagerServiceTest
Change-Id: I593d025f5dcb2ef61de7861d71131aec6d502c88
parent 7e4e0acc
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -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) {
        public void onDeviceStateChanged(int deviceState) {
            synchronized (mSyncRoot) {
                    mLogicalDisplayMapper.setDeviceFoldedLocked(folded);
                }
                mLogicalDisplayMapper.setDeviceStateLocked(deviceState);
            }
        }
    };
+8 −0
Original line number Diff line number Diff line
@@ -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) {