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

Commit ae31181f authored by Santos Cordon's avatar Santos Cordon Committed by Android (Google) Code Review
Browse files

Merge "Integrate LogicalDisplayMapper with DisplayFoldController."

parents bfa53ec4 5838d680
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -266,12 +266,6 @@ public abstract class DisplayManagerInternal {
     */
    public abstract void ignoreProximitySensorUntilChanged();

    /**
     * Sets the folded state of the device.
     * TODO: b/168208522 - Remove in favor of DisplayStatePolicy when that is available.
     */
    public abstract void setDeviceFolded(boolean isFolded);

    /**
     * Describes the requested power state of the display.
     *
+23 −7
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ import android.util.SparseArray;
import android.util.Spline;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.IDisplayFoldListener;
import android.view.Surface;
import android.view.SurfaceControl;

@@ -103,6 +104,7 @@ 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;

@@ -312,6 +314,9 @@ 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;

    public DisplayManagerService(Context context) {
        this(context, new Injector());
    }
@@ -429,6 +434,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);

            scheduleTraversalLocked(false);
        }
    }
@@ -2563,13 +2573,6 @@ public final class DisplayManagerService extends SystemService {
        public void ignoreProximitySensorUntilChanged() {
            mDisplayPowerController.ignoreProximitySensorUntilChanged();
        }

        @Override
        public void setDeviceFolded(boolean isFolded) {
            synchronized (mSyncRoot) {
                mLogicalDisplayMapper.setDeviceFoldedLocked(isFolded);
            }
        }
    }

    class DesiredDisplayModeSpecsObserver
@@ -2606,4 +2609,17 @@ public final class DisplayManagerService extends SystemService {
            }
        }
    }

    class DisplayFoldListener extends IDisplayFoldListener.Stub {
        @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);
                }
            }
        }
    };
}
+25 −25
Original line number Diff line number Diff line
@@ -167,7 +167,31 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
        }
    }

    public void setDeviceFoldedLocked(boolean isFolded) {
    public void dumpLocked(PrintWriter pw) {
        pw.println("LogicalDisplayMapper:");
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ");
        ipw.increaseIndent();

        ipw.println("mSingleDisplayDemoMode=" + mSingleDisplayDemoMode);
        ipw.println("mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId);

        final int logicalDisplayCount = mLogicalDisplays.size();
        ipw.println();
        ipw.println("Logical Displays: size=" + logicalDisplayCount);


        for (int i = 0; i < logicalDisplayCount; i++) {
            int displayId = mLogicalDisplays.keyAt(i);
            LogicalDisplay display = mLogicalDisplays.valueAt(i);
            ipw.println("Display " + displayId + ":");
            ipw.increaseIndent();
            display.dumpLocked(ipw);
            ipw.decreaseIndent();
            ipw.println();
        }
    }

    void setDeviceFoldedLocked(boolean isFolded) {
        mIsFolded = isFolded;
        if (mIsFoldedOverride != null) {
            isFolded = mIsFoldedOverride.booleanValue();
@@ -237,30 +261,6 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
        }
    }

    public void dumpLocked(PrintWriter pw) {
        pw.println("LogicalDisplayMapper:");
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ");
        ipw.increaseIndent();

        ipw.println("mSingleDisplayDemoMode=" + mSingleDisplayDemoMode);
        ipw.println("mNextNonDefaultDisplayId=" + mNextNonDefaultDisplayId);

        final int logicalDisplayCount = mLogicalDisplays.size();
        ipw.println();
        ipw.println("Logical Displays: size=" + logicalDisplayCount);


        for (int i = 0; i < logicalDisplayCount; i++) {
            int displayId = mLogicalDisplays.keyAt(i);
            LogicalDisplay display = mLogicalDisplays.valueAt(i);
            ipw.println("Display " + displayId + ":");
            ipw.increaseIndent();
            display.dumpLocked(ipw);
            ipw.decreaseIndent();
            ipw.println();
        }
    }

    void setFoldOverrideLocked(Boolean isFolded) {
        if (!Objects.equals(isFolded, mIsFoldedOverride)) {
            mIsFoldedOverride = isFolded;
+30 −25
Original line number Diff line number Diff line
@@ -80,22 +80,25 @@ class DisplayFoldController {
    }

    void setDeviceFolded(boolean folded) {
        mDisplayManagerInternal.setDeviceFolded(folded);

        if (mFolded != null && mFolded == folded) {
            return;
        }
        if (folded) {
            Rect foldedArea;

        final Rect foldedArea;
        if (!mOverrideFoldedArea.isEmpty()) {
            foldedArea = mOverrideFoldedArea;
        } else if (!mFoldedArea.isEmpty()) {
            foldedArea = mFoldedArea;
        } else {
                return;
            foldedArea = null;
        }

            mDisplayManagerInternal.getNonOverrideDisplayInfo(mDisplayId, mNonOverrideDisplayInfo);
        // Only do display scaling/cropping if it has been configured to do so
        if (foldedArea != null) {
            if (folded) {

                mDisplayManagerInternal.getNonOverrideDisplayInfo(
                        mDisplayId, mNonOverrideDisplayInfo);
                final int dx = (mNonOverrideDisplayInfo.logicalWidth - foldedArea.width()) / 2
                        - foldedArea.left;
                final int dy = (mNonOverrideDisplayInfo.logicalHeight - foldedArea.height()) / 2
@@ -111,6 +114,8 @@ class DisplayFoldController {
                mWindowManagerInternal.clearForcedDisplaySize(mDisplayId);
                mDisplayManagerInternal.setDisplayOffsets(mDisplayId, 0, 0);
            }
        }

        mDurationLogger.setDeviceFolded(folded);
        mDurationLogger.logFocusedAppWithFoldState(folded, mFocusedApp);
        mFolded = folded;
+0 −5
Original line number Diff line number Diff line
@@ -471,7 +471,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    int mLidKeyboardAccessibility;
    int mLidNavigationAccessibility;
    private boolean mLidControlsDisplayFold;
    private boolean mShouldSwapDisplaysOnLidSwitch;
    int mShortPressOnPowerBehavior;
    int mLongPressOnPowerBehavior;
    int mVeryLongPressOnPowerBehavior;
@@ -1849,8 +1848,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                com.android.internal.R.integer.config_lidNavigationAccessibility);
        mLidControlsDisplayFold = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_lidControlsDisplayFold);
        mShouldSwapDisplaysOnLidSwitch = mContext.getResources().getStringArray(
                com.android.internal.R.array.config_internalFoldedPhysicalDisplayIds).length == 2;

        mAllowTheaterModeWakeFromKey = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_allowTheaterModeWakeFromKey);
@@ -5041,8 +5038,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        final int lidState = mDefaultDisplayPolicy.getLidState();
        if (mLidControlsDisplayFold && mDisplayFoldController != null) {
            mDisplayFoldController.requestDeviceFolded(lidState == LID_CLOSED);
        } else if (mShouldSwapDisplaysOnLidSwitch) {
            mDisplayManagerInternal.setDeviceFolded(lidState == LID_CLOSED);
        } else if (lidState == LID_CLOSED) {
            int lidBehavior = getLidBehavior();
            switch (lidBehavior) {